73

誰かが正規表現で単語(?i)(?-i)ラップすることの意味を説明できますか?

(?i)test(?-i)

テストしたところ、、、、に一致testTESTますteSt。しかし、私はこれを前に見たことがありません。?前はどういうi意味ですか?私はここでこれを見ました。

4

3 に答える 3

109

(?i)大文字と小文字を区別しないモードを開始します

(?-i)大文字と小文字を区別しないモードをオフにします

このページの「正規表現の一部のみのモードのオンとオフの切り替え」セクションの詳細

最新の正規表現では、正規表現の一部にのみ修飾子を適用できます。正規表現の中央に修飾子(?ism)を挿入すると、修飾子は正規表現の修飾子の右側の部分にのみ適用されます。モードの前にマイナス記号を付けると、モードをオフにできます。マイナス記号以降のすべてのモードがオフになります。たとえば、(?i-sm)は大文字と小文字を区別しないようにし、単一行モードと複数行モードの両方をオフにします。

すべての正規表現フレーバーがこれをサポートしているわけではありません。JavaScriptとPythonは、すべてのモード修飾子を正規表現全体に適用します。モード修飾子が正規表現全体に適用される場合、オプションをオフにしても意味がないため、これらは(?-ismx)構文をサポートしていません。デフォルトでは、すべてのオプションがオフになっています。

使用している正規表現フレーバーがモード修飾子をどのように処理するかをすばやくテストできます。正規表現(?i)te(?-i)stは、testおよびTEstと一致する必要がありますが、teSTまたはTESTとは一致しません。

于 2013-02-28T21:10:49.317 に答える
32

(?i)大文字と小文字を区別しないモードをオンに(?-i)し、オフにします。

たとえば、を試した場合、 testTEsttEst(?i)te(?-i)stと一致しますが、 teSTとは一致しません。

于 2013-02-28T21:10:39.580 に答える
10

rubydocsから直接取得。

正規表現の終了区切り文字の後に、パターンの一致方法を制御する1つ以上の1文字のオプションを続けることができます。

/ pat/i-大文字と小文字を区別しない

/ pat/m-改行を。と一致する文字として扱います。

/ pat/x-パターン内の空白とコメントを無視します

/ pat / o->#{}補間を1回だけ実行します

i、m、およびxは、(?on-off)構文を使用して部分式レベルに適用することもできます。これにより、オプションをオンにし、括弧で囲まれた式のオプションをオフにします。

于 2013-02-28T21:11:45.027 に答える