問題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正則表達式引擎特性,請參考「掌握正則表達式」