我对使用正则表达式还很陌生,但是我一直想解决一个问题。我在了解正在发生的事情方面遇到问题,希望有人可以向我提示正确的方向。
我想要达到的目标:
为避免视图中出现重复项,我想检查属性名称是否包含相应的属性单元。例如,if$attribute['name'] = "Cutting speed (in m/Min.)"
和attribute['unit'] = "m/min"
属性单元不应显示,因为名称中已经提到了它。
我如何实现这一目标:
我正在使用以下正则表达式来检查属性单元:~\b' . attribute['unit'] . '\b~i'
在上面提到的示例中,该方法很好用,但是如果该单元是一个特殊字符(例如%
或)"
,则效果不是很好。
问题所在
在测试特殊字符问题时,我遇到了以下现象:
如果我使用此正则表达式,则/\b%\b/
它的行为与预期不符,并且与%
in匹配,bla%bla
但与in匹配,而不是在%
它前面或后面带有空格:https : //regex101.com/r/56iYEI/3
似乎%将正则表达式的行为改为相反的行为。我还测试了其他“特殊字符”(“和&”),它们似乎具有相同的效果。
之前,我被定向到这个问题(正则表达式单词边界和特殊字符)并阅读了答案。我现在知道可以\b
检查单词边界。但是我仍然不清楚为什么它会像a%
或"
出现时那样表现。
问题
%
轮流检查单词边界\b
如何?%
或)"
?期待任何提示。提前致谢!
断字是一串字字符和一串非字字符(或开始或结束)之间的点。非单词字符不必是空格。
foo"@#bar {}qux
在这个字符串的话休息是前,后foo
,bar
和qux
。
该表达式/\b"@#\b/
将匹配foo
和之间的字符bar
。但是/\b"@\b/
不会,因为后面没有单词(因此没有单词中断)@
。
要解决此问题,请检查一个分词符或一个非单词字符。以下表达式匹配两种情况;/(^|\W|\b)"@($|\W|\b)/
。
'~(^|\W|\b)' . attribute['unit'] . '($|\W|\b)~i'
PS如果attribute['unit']
可以包含任何字符,请确保在使用regex之前将其引用preg_quote()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句