php正则表达式匹配三个单词,如果不是那么两个然后一个

时间:2012-08-01 04:56:27

标签: regex

Q1:我正在写一个正则表达式,但没有成功。我想匹配以下内容:

    so i would

如果没有那么匹配:

    so i

然后:

    i would

    so
    i
    would

这是我的代码:

\b(so i|i would|so i would|(so|i|would))\b

它唯一匹配:所以,我,会,所以我,我会...但不匹配所以我会吗?

3 个答案:

答案 0 :(得分:3)

正确订购你的正则表达式。

\b(so i would|so i|i would|(so|i|would))\b

将最长的字符串放在左侧。 |是左关联的,因此,在正则表达式的版本中,匹配较短的字符串。

答案 1 :(得分:0)

把它放在开头

\b(so i would|so i|i would|(so|i|would))\b

答案 2 :(得分:0)

在组中留下最长的图案:\ b(long | ... | short)\ b
另一种解决方案:\b(so i would|i would|would|so i|so|i)\b
附:这是NFA正则表达式引擎功能,请参阅“掌握正则表达式”