正则表达式“/ ^ something /”行为

时间:2010-02-04 19:49:13

标签: php regex pcre

在一些模糊的情况下,像“/ ^ match /”这样的正则表达式以完全相反的方式工作,匹配“其他”的行,并且解决它的唯一方法是将整个正则表达式置于括号内。 。“/ ^(匹配)/”,为什么会发生这种情况?

2 个答案:

答案 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"]

那是因为括号捕获了我正在分裂的东西。这听起来有点像你描述的行为 - 如果你发布一个说明问题的例子(不仅仅是正则表达式,而是你如何使用它以及它所采用的字符串),它会更容易分辨。