2016-08-02 63 views
1

我正在嘗試構建表達式的正則表達式,以獲取Boost Mobile或BoostMobile(取決於此值)的值。PHP正則表達式顯示abc或abc xyz格式

有什麼建議嗎?

+0

順序事項'升壓\ B'首先匹配。 '\ W *((?i)Boost \ s * Mobile \ b(?-i)|(?i)Boost \ b(?-i)\ s *)\ W *'會起作用。無論如何,有一個更好的答案。 – chris85

回答

3

在NFA正則表達式中,在未錨定的交替組中,匹配的第一個分支停止了組處理,位於右側的其他分支未針對該字符串進行檢查。你可以在Alternation with The Vertical Bar or Pipe Symbol上閱讀更多內容。

因此,交換價值和簡化的模式,你可以使用

/\b(Boost \s*Mobile|Boost)\b/i 

然而,這裏的最有效的方法就是通過使用可選的組:

/\bBoost(?:\s*Mobile)?\b/i 
     ^^   ^^ 

regex demo

i不區分大小寫修飾符在整個正則表達式上設置。您無需在模式的開始/結束時將其打開和關閉。此外,\W*可以匹配一個空字符串,因此當您使用\b時,您檢查字邊界的方式可能會失敗。

圖案的詳細資料

  • \b - 領先字邊界
  • Boost - 文字串
  • (?:\s*Mobile)? - 0 - 匹配的
    • \s* 1組或0的序列的可選組+空格
    • Mobile - 文字串
  • \b - 尾字邊界
+0

非常感謝!這兩個解決方案都有效 – user6622569

相關問題