-1

在某些晦涩的情况下,像“/^match/”这样的正则表达式以完全相反的方式工作,匹配“其他东西”的行,修复它的唯一方法是将整个正则表达式放在大括号内......“/ ^(match)/",为什么会这样?

4

2 回答 2

2

这里只是一个疯狂的猜测......我能想到的唯一例子会给出你描述的行为正在改变:

/^foo|bar/

/^(foo|bar)/

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

忘记那些括号是一个容易的错误......我有时也这样做过......脸红......;)

我现在想不出任何其他例子,但我敢肯定,在其他时候,括号的添加会在含义上产生微妙的变化。下一次,记得保存你找到的示例并将其发布在这里,以便我们查看。

于 2010-02-04T19:59:15.430 回答
0

完全随机猜测,但你在使用它split吗?

在javascript中(我不太确定PHP),如果我输入:

"matchabc".split(/^match/)

我得到:

["", "abc"]

请注意, split 使用匹配来划分字符串,因此您会得到不匹配的部分。

但是,如果我这样做:

"matchabc".split(/^(match)/)

我得到:

["", "match", "abc"]

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

于 2010-02-04T20:23:26.023 回答