9

例を挙げると、 ? は?/[ ]{0,3}/とは意味が異なります。/ {0,3}/

4

2 に答える 2

13

正規表現のトークン間に「空きスペース」を許可する修飾子フラグが有効になっている場合 (読みやすさと正規表現内のコメントを許可するため) 、異なる意味を持つ可能性があります。xただし、この設定が有効になっていない場合、2 つの機能に違いはありません。

特にこのオプションの詳細な説明については、この正規表現チュートリアルを参照してください。

...free-spacing モードは、文字クラス内では効果がありません。文字クラス内のスペースと改行は、文字クラスに含まれます。

さらに、PHP 固有の権限については、PCRE パターン修飾子の PHP マニュアルを参照してください。

x (PCRE_EXTENDED) この修飾子が設定されている場合、パターン内の空白データ文字は、エスケープまたは文字クラス内を除いて完全に無視されます...

正規表現のさまざまなフレーバーで修飾子を実装する方法を説明する、修飾子の指定に関するこの他の Regex チュートリアル ページも参照してください。

修飾子フラグは、正規表現(?x)のその時点から正規表現の最後まで (または終了まで) 空き領域が有効であることを意味するため、正規表現自体に含めることができます(?-x)。特にPHPの場合、修飾子フラグは、正規表現を追跡することにより、式全体に適用できます(例の1つを使用)/ {0,3}/x

角括弧形式 ( [ ]) は、その設定に関係なくリテラル スペースを明示的に表しており、IMO は自己文書化されています。\sおそらく " " 文字クラス (タブや改行も含む)よりも優先して、リテラル スペースを使用する開発者の意図を非常に明確に示しています。

さらに、これも単なる IMO ですが、\ 将来のコード管理者が簡単に誤解したり見落としたりする " " を使用するのではなく、これはスペースをリテラルとして "エスケープ" するための好ましい方法です。

于 2013-04-13T13:35:58.550 に答える