2016-08-02 4 views
1

私が存在している方ブーストモバイルやブースト・モバイルのいずれかの値を取得するために発現させるための正規表現を構築しようとしています。PHP正規表現ディスプレイABCまたはabcのどちらかのxyz形式

お願いします。 NFAの正規表現で

+0

を末尾のための事項 'ブーストの\ B'が最初に一致します。 '\ Wは*(?(I)(* \はのモバイル\ bをブースト - I)|???(I)ブースト\ bを( - I)\がs *)\ W *'働くだろう。とにかく下のほうが良い答えがあります。 – chris85

答えて

3

は、非アンカー交代グループでは、マッチした最初の分岐は、グループの処理を停止し、右側にさらに配置された他の支店は、文字列に対してチェックされていません。それについてはAlternation with The Vertical Bar or Pipe Symbolで詳しく読むことができます。 regex demo

を参照してください

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

ので、値を交換してパターンを簡略化します。ただし

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

使用することができ、ここでは最も効果的な方法は、オプションのグループを使用しています

i大文字小文字を区別しない修飾子は、全体の正規表現で設定されています。パターンの最初と最後でオンとオフを切り替える必要はありません。また、\W*は空の文字列を一致させることができますので、\bが動作する際に単語境界を確認するあなたの方法は、ここで失敗することがあります。

パターンは詳細:

  • \b - リテラルストリング
  • (?:\s*Mobile)? - - 0 -
    • \s*の1つのまたは0の配列に一致するオプションのグループのワード境界
    • Boostをリード+空白
    • Mobile - リテラルストリング
  • \b - ワード境界に
+0

ありがとうございました!両方のソリューションが機能しました! – user6622569

関連する問題