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