在一些模糊的情况下,像“/ ^ match /”这样的正则表达式以完全相反的方式工作,匹配“其他”的行,并且解决它的唯一方法是将整个正则表达式置于括号内。 。“/ ^(匹配)/”,为什么会发生这种情况?
答案 0 :(得分:2)
这里只是一个疯狂的猜测......我能想到的唯一一个例子会让你所描述的行为发生变化:
/^foo|bar/
到
/^(foo|bar)/
请注意,添加括号会更改此正则表达式的含义。第二个匹配字符串开头的foo或bar。第一个匹配字符串开头的foo或字符串中的 where 。如您所述,这可能会给出一些错误的匹配。
忘记那些括号是一个容易的错误......我偶尔也会这样做......腮红......;)
我现在想不出任何其他的例子,但我确信有可能在其他时候添加括号会给出意义上的微妙变化。下次,请记得保存您找到的示例并将其发布在此处,以便我们可以看到它。
答案 1 :(得分:0)
完全随机猜测,但您是否在split
中使用它?
在javascript中(我对PHP不太确定),如果我输入:
"matchabc".split(/^match/)
我明白了:
["", "abc"]
请注意,split使用匹配来划分字符串,因此您可以获得不匹配的部分。
但是,如果我这样做:
"matchabc".split(/^(match)/)
我明白了:
["", "match", "abc"]
那是因为括号捕获了我正在分裂的东西。这听起来有点像你描述的行为 - 如果你发布一个说明问题的例子(不仅仅是正则表达式,而是你如何使用它以及它所采用的字符串),它会更容易分辨。