例を挙げると、 ? は?/[ ]{0,3}/
とは意味が異なります。/ {0,3}/
2 に答える
正規表現のトークン間に「空きスペース」を許可する修飾子フラグが有効になっている場合 (読みやすさと正規表現内のコメントを許可するため) 、異なる意味を持つ可能性があります。x
ただし、この設定が有効になっていない場合、2 つの機能に違いはありません。
特にこのオプションの詳細な説明については、この正規表現チュートリアルを参照してください。
...free-spacing モードは、文字クラス内では効果がありません。文字クラス内のスペースと改行は、文字クラスに含まれます。
さらに、PHP 固有の権限については、PCRE パターン修飾子の PHP マニュアルを参照してください。
x (PCRE_EXTENDED) この修飾子が設定されている場合、パターン内の空白データ文字は、エスケープまたは文字クラス内を除いて完全に無視されます...
正規表現のさまざまなフレーバーで修飾子を実装する方法を説明する、修飾子の指定に関するこの他の Regex チュートリアル ページも参照してください。
修飾子フラグは、正規表現(?x)
のその時点から正規表現の最後まで (または終了まで) 空き領域が有効であることを意味するため、正規表現自体に含めることができます(?-x)
。特にPHPの場合、修飾子フラグは、正規表現を追跡することにより、式全体に適用できます(例の1つを使用)/ {0,3}/x
角括弧形式 ( [ ]
) は、その設定に関係なくリテラル スペースを明示的に表しており、IMO は自己文書化されています。\s
おそらく " " 文字クラス (タブや改行も含む)よりも優先して、リテラル スペースを使用する開発者の意図を非常に明確に示しています。
さらに、これも単なる IMO ですが、\
将来のコード管理者が簡単に誤解したり見落としたりする " " を使用するのではなく、これはスペースをリテラルとして "エスケープ" するための好ましい方法です。