Php regex“/^某物;行为

Php regex“/^某物;行为,php,regex,pcre,Php,Regex,Pcre,在一些模糊的情况下,“^match/”这样的正则表达式以完全相反的方式匹配“其他东西”的行,唯一的解决方法是将整个正则表达式放在大括号中。。。“/^(匹配)/”,为什么会发生这种情况?这里只是一个猜测。。。我能想到的唯一一个能给出您描述的行为的例子是变化: /^foo|bar/ 到 请注意,添加括号会更改此正则表达式的含义。第二个匹配字符串开头的foo或bar。第一个匹配字符串开头的foo或字符串中任何位置的bar。如您所述,这可能会产生一些错误匹配 忘记那些括号很容易出错。。。我偶尔也这样做

在一些模糊的情况下,“^match/”这样的正则表达式以完全相反的方式匹配“其他东西”的行,唯一的解决方法是将整个正则表达式放在大括号中。。。“/^(匹配)/”,为什么会发生这种情况?

这里只是一个猜测。。。我能想到的唯一一个能给出您描述的行为的例子是变化:

/^foo|bar/

请注意,添加括号会更改此正则表达式的含义。第二个匹配字符串开头的foo或bar。第一个匹配字符串开头的foo或字符串中任何位置的bar。如您所述,这可能会产生一些错误匹配

忘记那些括号很容易出错。。。我偶尔也这样做过……脸红……;)


我现在想不出任何其他的例子,但我相信在其他情况下,添加括号会使意思发生微妙的变化。下次,请记住保存您找到的示例,并将其发布到此处,以便我们查看。

完全是随机猜测,但您是否在
拆分中使用了它

在javascript中(我对PHP不太确定),如果我键入以下内容:

“matchabc”。拆分(/^match/)

我得到:

[“”,“abc”]

请注意,split使用匹配来分割字符串,因此可以得到不匹配的片段

但是,如果我这样做:

“matchabc”。拆分(/^(匹配)/)

我得到:

[,“匹配”,“abc”]


这是因为括号捕捉到了我要拆分的内容。这听起来有点像您描述的行为——如果您发布一个示例来说明问题(不仅是正则表达式,还包括您如何使用它及其作用的字符串),那么就更容易判断了。

?请举个例子!您确定您没有执行类似“/[^match]/”的操作吗?你能提供一个具体的例子吗?你能给我们一些代码的例子,哪些是有效的,哪些是无效的?我想不出一个简单的例子,实际的正则表达式是196个字符长,示例数据是一个有147行的小文件
/^(foo|bar)/