与包含特殊字符的属性名称中的属性单元匹配的正则表达式

问题描述 投票:1回答:1

我对使用正则表达式还很陌生,但是我一直想解决一个问题。我在了解正在发生的事情时遇到问题,希望有人可以向我提示正确的方向。

我想要达到的目标:

为了避免在视图中出现重复,我想检查属性名称是否包含相应的属性单元。例如,如果$attribute['name'] = "Cutting speed (in m/Min.)"attribute['unit'] = "m/min"属性单位不应该显示,因为名称中已经提到了它。

我如何实现这一目标:

我正在使用以下正则表达式检查属性单元:~\b' . attribute['unit'] . '\b~i'对于上面提到的示例,这很好用,但是如果单位是特殊字符,例如%",则效果不佳。

问题

在测试特殊字符问题时,我遇到了以下现象:

[如果我使用此正则表达式/\b%\b/,则其行为与预期不符,并且与%中的bla%bla匹配,但与%匹配,如果它在空格之前或之后:https://regex101.com/r/56iYEI/3

似乎%将正则表达式的行为改为相反的行为。我还测试了其他“特殊字符”(“和&”),它们似乎具有相同的效果。

我之前曾被问到这个问题(Regular Expression Word Boundary and Special Characters),并阅读了答案。我现在知道\b检查单词边界。但是我仍然不清楚为什么它会以%"出现时的方式表现出来。

问题

  1. %为何将\b变成单词边界检查?
  2. 如何实现我的目标以匹配字母数字单位和特殊字符单位,例如%"

期待任何提示。预先感谢!

php regex preg-match
1个回答
0
投票

分词符是一串单词字符和一串非单词字符(或开始或结束)之间的点。非单词字符不必为空格。

 foo"@#bar {}qux

在此字符串中,单词breaks在foobarqux之前和之后。

/\b"@#\b/表达式将匹配/\b"@#\b/foo之间的字符。但是,bar不会因为/\b"@\b/之后没有字(因此没有断字)。


要解决这个问题,请检查一个分词符或一个非单词字符。以下表达式匹配两种情况; /\b"@\b/

@
© www.soinside.com 2019 - 2024. All rights reserved.