问题1:我在php中写一个正则表达式,但不成功。我想匹配的情况如下:PHP的正则表达式,以匹配三个字,如果不是然后两个,然后一个
so i would
如果不匹配,那么:
然后:
i would
和
so
i
would
这里是我的代码:
\b(so i|i would|so i would|(so|i|would))\b
它唯一的匹配:所以,我,会,所以我,我会....但不匹配所以我会?
问题1:我在php中写一个正则表达式,但不成功。我想匹配的情况如下:PHP的正则表达式,以匹配三个字,如果不是然后两个,然后一个
so i would
如果不匹配,那么:
然后:
i would
和
so
i
would
这里是我的代码:
\b(so i|i would|so i would|(so|i|would))\b
它唯一的匹配:所以,我,会,所以我,我会....但不匹配所以我会?
正确地订购您的正则表达式。
\b(so i would|so i|i would|(so|i|would))\b
把最长的字符串匹配到左边。 |
是左关联的,因此,在您的正则表达式版本中,匹配较短的字符串。
只要把它在一开始
\b(so i would|so i|i would|(so|i|would))\b
把最长模式的组中左起:\ B(长| ... |短)\ b
另一种解决方案:\b(so i would|i would|would|so i|so|i)\b
附:这是NFA正则表达式引擎特性,请参考“掌握正则表达式”