これは参考ページで、かなり簡潔なので読む必要はないと思います。 他のセクションは必要なときにそれにリンクします。
Regex 修飾子は、このサイトのあらゆるところに出てきます。 これらの修飾子が何をするのか、また、すべての正規表現においてそれらを有効にする複数の方法を繰り返し説明するよりも、4 つの一般的なもの (i, s, m, x) を 1 つの場所に集めることにしました。 最後のセクションでは、その他の修飾子について簡単に説明します。
✽ 大文字小文字を区別しない: i
✽ DOTALL (Dot Matches Line Break): s (Ruby と JavaScript を除く)
✽ Multiline (^ と $ Match on Every Line): x

✽ Matching for Lines: m

✽ Matching on Every Line: x
2832 m (Ruby を除く)
✽ Free-Spacing: x (JavaScript を除く)
✽ その他の修飾子
✽ PCRE のパターン開始時の特殊な修飾子
(直リンク)

Case Insensitivity: i

By default, all major regex engines match in case-sensitive mode. Name のようなパターンが必要な場合。 + のようなパターンを大文字と小文字を区別せずにマッチさせたい場合は、その機能をオンにする必要があります。
そうですが…
大文字と小文字を区別しないというのは、実際にはどういう意味でしょうか?
英語のアルファベット 26 文字に固執する限り、大文字と小文字の定義は簡単です。 しかし、タイポグラフィの巧妙さや他の言語やスクリプトに手を広げると、物事はそう単純ではなくなります。
✽ fl (1文字、つまり fl リガチャ) は FL と一致するか?
✽ à (1文字) は À と一致するか?
✽ à (2文字、つまり a とグレイヴアクセント) は Àと一致するか?
✽ ßはssにマッチしますか。
✽ i は I と同様に İ (トルコ語の大文字 i) にもマッチしますか。
これらの質問は氷山の一角です。 特定のスクリプトを使用する場合、そのスクリプトで大文字と小文字を区別しないマッチングを特定のエンジンがどのように扱うかを調べる必要があります。
複数の方法
いくつかのエンジンでは、大文字と小文字を区別しないマッチングを有効にする方法が2つあることに注意してください: インライン修飾子 (?i)、または regex メソッドや関数のオプションとしてです。
インライン修飾子(?i)
.NET, PCRE (C, PHP, R…), Perl, Python, Java, Ruby (JavaScript では不可)では、例えば (?i)cat のようにインライン修飾子を使うことができます。 Pythonでは利用できない)3つの追加機能については、インライン修飾子のセクションを参照してください:文字列の途中でオンにする、(?-i)でオフにする、または(?i:foo)で非捕獲グループのコンテンツにのみ適用する
。NET
インライン修飾子の他に.NET言語では、IgnoreCaseオプションが用意されています。 例えば、C# では、:
var catRegex = new Regex("cat", RegexOptions.IgnoreCase);
Perl
(?i) インライン修飾子とは別に、Perl では、パターンの終了区切り文字の後に i フラグを追加することが可能です。 例えば、次のように使える。
if ($the_subject =~ m/cat/i) { … }
PCRE (C, PHP, R…)
PCREにおいて、ロケールに属さない英字で大文字小文字を区別せずにマッチングするには、(*UTF8) special start-of-pattern modifierでUnicodeモードを有効にしなければならないことに注意してください。i) inline modifier とは別に、PCRE では pcre_compile() (または同様の関数) を呼び出す際に PCRE_CASELESS モードを設定できます:

cat_regex = pcre_compile( "cat", PCRE_CASELESS, &error, &erroroffset, NULL ); 

PHP では、PCRE_CASELESS オプションは i フラグによって渡され、 正規表現文字列中の区切り文字の後に追加することができます。 例えば、以下のようになります。
$cat_regex = '~cat~i';
R では、PCRE_CASELESS オプションは ignore.case=TRUE オプションで渡されます。 例えば、
grep("cat", subject, perl=TRUE, value=TRUE, ignore.case=TRUE);
Python
インライン修飾子(?i)とは別に、PythonにはIGNORECASEというオプションがあります。 例えば、:
cat_regex = re.compile("cat", re.IGNORECASE)
Java
インラインモディファイアの他に、JavaにはCASE_INSENSITIVEというオプションがあります。 たとえば、次のように使用できます:

Pattern catRegex = Pattern.compile( "cat", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );

ここで追加された UNICODE_CASE オプションは、大文字小文字を区別しない機能が Unicode を認識することを保証します。
JavaScript
では、唯一の選択肢はパターンの終了区切り文字の後に i フラグを追加することです。 例えば、以下のようになります。

var catRegex = /cat/i;
Ruby
インライン修飾子 (?i) 以外に、Ruby ではパターンのクロージングデリミタの後に i フラグを追加することができます。 例えば、以下のようになります。
cat_regex = /cat/i
(direct link)

DOTALL (Dot Matches Line Breaks): s (with exceptions)

デフォルトでは、ドット . は改行やキャリッジリターンなどの行間文字にはマッチしません。 もし、BEGIN .*? ENDのようなパターンを行を越えてマッチさせたい場合は、その機能をオンにする必要があります。
このモードはシングルライン(それゆえs)と呼ばれることがありますが、これはドットに関する限り、文字列全体を一つの大きな行に変えてしまうからです-.*は最初の文字から最後の文字まで、間にどれだけ改行が入っていてもマッチします。
このモードは PCRE、Python、Java でも DOTALL と呼ばれています (正確には、PCRE のドキュメントでは PCRE_DOTALL を使用しています)。 私にとっては、DOTALLという名前はこのモードを呼ぶのに賢明な方法です。
JavaScript
JavaScript は単一行モードをサポートしていません。 改行を含む JavaScript の任意の文字にマッチさせるには、.NET Framework のような構文を使用します。 この文字クラスは、数字でない \D と数字である \d のどちらか1つの文字にマッチします。
JavaScriptのもう一つの解決策は、XRegExp正規表現ライブラリを使用することです。 もし無限に時間があるなら、Firas が regex 101 で行ったように、Emscripten を使って PCRE を JavaScript に移植してみることもできます。
インラインモディファイア (?s)
.NET, PCRE (C, PHP, R..), Perl, Python, Java (Ruby は不可)では、例えば (?s)BEGIN .*?s のようにインラインモディファイア (?s) を使用することができます。 ENDのようになります。 Pythonでは利用できない)3つの追加機能については、インライン修飾子のセクションを参照してください:文字列の途中でオンにする、(?-s)でオフにする、または(?s:foo)で非捕捉グループのコンテンツにのみ適用する
。NET
インライン修飾子の他に.NET言語にはシングルライン(Singleline)というオプションも用意されています。 例えば、C# では、:

var blockRegex = new Regex( "BEGIN .*? END", RegexOptions.IgnoreCase | RegexOptions.Singleline );

Perl
Perl では、(?s) インライン修飾子とは別に、パターンの終了区切り文字の後に s フラグを追加することができます。 例えば、以下のようになります。
if ($the_subject =~ m/BEGIN .*? END/s) { … }
PCRE (C, PHP, R…)
(?s) インライン修飾子とは別に、PCRE では pcre_compile() (や同様の関数) を呼び出す際に PCRE_DOTALL モードを設定できます:

block_regex = pcre_compile( "BEGIN .*? END", PCRE_DOTALL, &error, &erroroffset, NULL ); 

PHP において、PCRE_DOTALL オプションは s フラグによって伝えられ、正規表現の文字列において閉じ区切りの後に追加されます。 例えば、以下のようになります。
$block_regex = '~BEGIN .*? END~s';
Python
(?s) インライン修飾子とは別に、Python には DOTALL オプションがあります。 例えば、:
block_regex = re.compile("BEGIN .*? END", re.IGNORECASE | re.DOTALL)
Java
インライン修飾子(?s)の他に、JavaにはDOTALLオプションがあります。 例えば、:

Pattern blockRegex = Pattern.compile( "BEGIN .*? END", Pattern.CASE_INSENSITIVE | Pattern.DOTALL ); 

Rubyを使用することができます。 (?m) 修飾子と m フラグ
Ruby では、例えば (?m)BEGIN .*?*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.インライン修飾子を使用できます。 END のようになります。 これはRubyの奇妙な癖で、他のエンジンは「^と$がすべての行でマッチする」モードのために(?m)を使います。
インライン修飾子に関するセクションで、3つの追加機能についての興味深い詳細を参照してください。文字列の途中でオンにする、(?-m)でオフにする、(?m:foo)で非捕獲グループのコンテンツにのみ適用する。
またRubyはregex文字の最後にmフラッグを追加することもできます。 例えば、:
block_regex = /BEGIN .*? END/m
(直リンク)
DOTALLの由来
単一行モードは、PCREのPCRE_DOTALLオプション、Pythonのre.DOTALLオプション、JavaのPattern.DOTALLオプションからDOTALL(「dot matches all」の略)ともよく言われています。
「DOTALL は Python のものだ」と主張するのを何度か聞きましたが、これは PCRE と Java の同等のオプションについて知らない人からのようでした。 DOTALL が最初に登場したのはどこなのでしょうか。 PCREの変更履歴や古いPythonのドキュメントを見ると、PCREではバージョン0.96(1997年10月)、Pythonではバージョン1.5(1998年2月)、そしてJavaでは1.4(2002年2月)で登場したようです。 PCREとPythonの紹介の間のギャップは決定的ではなく、この言葉は以前のベータ版や他のツールでも流通していたかもしれません。そこで、PCREの生みの親であるPhilip Hazelにこのことについて聞いてみました。 Perl の /s オプションに対応する PCRE オプションの名前を考えようとしたとき、確かに他では見かけませんでした。 (“S” は “single-line” (…) を意味するので、もっと良い名前が欲しかったのです。)

そこで、です。 ちょっとした歴史が好きな人は、このおいしいナゲットを楽しめるかもしれません。

Multiline (^ and $ Match on Every Line): m (except Ruby)

Ruby を除くすべての主要エンジンでは、アンカー ^ と $ は文字列の最初と最後にのみマッチするようになっています。
他のエンジンでは、^Define や >>>$ のようなパターンを各行の最初と最後でマッチさせたい場合、その機能をオンにする必要があります。
Ruby
では、アンカー ^ と $ は常に全行でマッチします。 このオプションをオフにする方法はない。 というのも、他の言語と同様、文字列の先頭と末尾には別々のアンカーが存在するからです。
一方で、Ruby が m フラグと修飾子を非標準的な方法で使うという選択をしたことを後悔することもあります (DOTALL 参照)。
インライン修飾子 (?m)
.NET, PCRE (C, PHP, R..), Perl, Python, Java と Ruby (JavaScript では不可) では、例えば (?m)^cat のようにインライン修飾子が使えるのですが、(?m) のように使うことはできないのです。 Pythonでは利用できない)3つの追加機能については、インライン修飾子のセクションを参照してください:文字列の途中でオンにする、(?-m)でオフにする、または(?m:foo)で非捕獲グループのコンテンツにのみ適用する、などです
.NET
インライン修飾子のほかに、.NET言語にはMultilineというオプションがあります。 例えば、C# では、:

var catRegex = new Regex("^cat", RegexOptions.IgnoreCase | RegexOptions.Multiline); 

Perl
Perl では、(?m) インライン修飾子以外に、パターンの終了区切り文字の後に m フラグを追加することが可能です。 例えば、以下のようになります。
if ($the_subject =~ m/^cat/m) { … }
PCRE (C, PHP, R…)
インライン修飾子 (?m) とは別に、PCRE では pcre_compile() (や同様の関数) を呼び出す際に PCRE_MULTILINE モードを設定できます。

cat_regex = pcre_compile( "^cat", PCRE_CASELESS | PCRE_MULTILINE, &error, &erroroffset, NULL ); 

PHP において、PCRE_MULTILINE オプションは m フラグによって伝えられ、正規表現において、クロージング・デリミターの後に追加することが可能です。 例えば、以下のようになります。
$cat_regex = '~^cat~m';
Python
Python には (?m) インライン修飾子とは別に、MULTILINE オプションがあります。 例えば:
cat_regex = re.compile("^cat", re.IGNORECASE | re.MULTILINE)
Java
インライン修飾子(?m)以外に、JavaにはMULTILINEオプションがあります。 例えば、

Pattern catRegex = Pattern.compile( "^cat", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE ); 

JavaScript
JavaScriptでは、唯一の選択肢はパターンの終了区切り文字の後にmフラグを追加することです。 例えば、次のようになります。
var catRegex = /^cat/m;
(direct link)

Free-Spacing: x (except JavaScript)

デフォルトでは、正規表現文字列内の任意のスペースは、マッチする文字を特定します。 正規表現文字列を複数行に渡って記述できる言語では、改行もマッチするリテラル文字を指定します。 異なる意味を持つグループを区切るためにスペースを挿入することができないので (英語で書くときにフレーズとプラグラムの間で行うように)、 regex は、例えば regex humor page:
^(?=(?!(.))()(?-1)(?<!\d(?<=(?!)\d))).$
の Meaning of Life regex のように読みづらくなってしまう可能性があります。 たとえば、トークンの間にスペースを追加することができます。 PHP では、次のように書くことができます。最後の区切り文字 ~:
$word_with_digit_and_cap_regex = '~ ^ (?=\D*\d) \w*\w* $ ~x';
の後の x フラグに注目してください。 正規表現は何行にでも広げることができ、インデントやコメント(#で始まる)を追加することができます。 たとえば、C# では次のようになります:

var wordWithDigitAndCapRegex = new Regex(@"(?x) # Free-spacing mode ^ # Assert that position = beginning of string ######### Lookahead ########## (?= # Start lookahead \D* # Match any non-digits \d # Match one digit ) # End lookahead ######## Matching Section ######## \w* # Match any word chars # Match one upper-case letter \w* # Match any word chars $ # Assert that position = end of string");

このモードはフリースペースモードと呼ばれます。 また、ホワイトスペース モード、コメント モード、冗長モードと呼ばれることもあります。
上記のような単純な正規表現ではやりすぎかもしれません (あなたのコードを保守しなければならない人は、このことに感謝するでしょうが)。
文字クラスの内部では、スペース文字と# (そうでなければコメントを導入する) はまだ尊重されることに注意してください-ただし Java では、これらの文字にマッチする場合は両方ともエスケープする必要があります。
いくつかのエンジンでは、フリースペースモードを有効にする方法が2つあります。インラインモディファイアとして、または regex メソッドや関数のオプションとしてです。
フリースペースモードは素晴らしいものですが、なぜパターンが期待通りに動作しないのかと頭をかきむしることになる、いくつかの小さな危険性があることを認識しておく必要があります。
Trip Hazard #1: 空白の意味
まず、Number.Document を使用できなくなりました。 \のような文字列にマッチするようになりました。 理由は、.Number: 24のような文字列にはスペースが含まれるからです。 \のスペースはスペースにマッチしなくなったからです。 今はフリースペースモードなんですよ?
スペース文字にマッチさせるには、それを指定する必要があります。 これを行う 2 つの主な方法は、文字クラスの中に配置するか、バックスラッシュでエスケープすることです。 どちらを使ってもよい。 Number:\d+ or Number:\d+
もちろんNumber:↵もマッチしますが、↵はスペース文字以外にもマッチするものがあることを忘れないでください。 例えば、タブや改行にもマッチします。
Trip Hazard #2: Late Start
次に、フリースペースの力を過信して、正規表現を独立させるために次のようなことを試すことがあります。x) が正規表現の最初のものであるように見えるかもしれませんが、そうではありません。
最初のダブルクォート ” の後に、改行といくつかの空白があります。 この段階ではまだフリースペースモードではないので、エンジンはそれらに合わせようとします。 このモードは、(?x)に遭遇したときだけオンになります。 この正規表現は、文字列のアンカー ^ の始まりに遭遇した時点で、すでに改行とスペース文字にマッチしているはずだからです!
このため、最初の例を見てみると、フリースペース修飾子 (?x) が開引用文字の後の一番最初のものであることがわかるでしょう。
空白はパターンから切り捨てられるだけではありません
空白が無視されるとはいえ、空白の位置は前のトークンと次のトークンを分離しているのです。 例えば、
✽ (A)\1 2 と (A)\12 は同じではありません。 .NET, PCRE, Perl, Rubyでは前者はAA2に、後者はAnにマッチします(12は改行文字の8進コード)
✽ \p{Nd} は有効ですが、PerlとRuby以外では無効
JavaScript
JavaScriptではfree-spacingモードはサポートされていません。 JavaScriptでは、改行を含むすべての文字にマッチさせるには、.NET Frameworkのような構文を使用します。 この文字クラスは、数字以外の⾊字または数字⾊字のどちらか1文字にマッチします。
JavaScriptのもう一つの解決策は、XRegExp正規表現ライブラリーを使うことです。 もし無限に時間があるなら、Firas が regex 101 で行ったように、Emscripten を使って PCRE を JavaScript に移植することもできます。
インラインモディファイア (?s)
.NET, PCRE (C, PHP, R..), Perl, Python, Java および Ruby (JavaScript ではありません) では、インラインモディファイア (?) を使用することができます。x) を使用することができます。たとえば、これは繰り返される単語にマッチするためのエアレーション正規表現です:
(?x) (\w+) + \bインライン修飾子に関するセクションも参照してください。
.NET
インライン修飾子 (?x) とは別に、 .NET 言語には IgnorePatternWhitespace というオプションが用意されています。 例えば、C# では、:

var repeatedWordRegex = new Regex(@" (\w+) + \b", RegexOptions.IgnorePatternWhitespace );

Perl
Perl では、(?x) インライン修飾子の他に、パターンの終了区切り文字の後に x フラグを追加することができます。 例えば、以下のようになります。
if ($the_subject =~ m/(\w+) + \b/x) { … }
PCRE (C, PHP, R…)
(?x) インライン修飾子とは別に、PCRE では pcre_compile() (や同様の関数) を呼び出す際に PCRE_EXTENDED モードを設定できます。

repeated_word_regex = pcre_compile( "(\w+) + \b", PCRE_EXTENDED, &error, &erroroffset, NULL ); 

PHP では PCRE_EXTENDED オプションは x フラグで渡しますので、正規表現においてクロージミタより後に追加してください。 たとえば、次のようになります。
$repeated_word_regex = '~(\w+) + \b~x';
Python
(?x) インライン修飾子とは別に、PythonにはVERBOSEオプションがあります。 例えば:
repeated_word_regex = re.compile(r"(\w+) + \b", re.VERBOSE)

Java
他のエンジンと違って、Java の文字クラス内ではハッシュやコメント、スペースは無視されますから、これらの文字をクラスで使いたい場合は、例えば +
Inline modifier とは別に、Java には COMMENTS オプションがあります。 例えば、:

Pattern repeatedWordRegex = Pattern.compile( "(\w+) + \1\b", Pattern.COMMENTS );

Ruby
Ruby には (?x) inline modifier とは別に、正規表現の文字列の最後に x フラグを追加することができます。 例えば、以下のようになります。
repeated_word_regex = /(\w+) + \b/x
(direct link)

Other Modifiers

エンジンによっては、i、s、m、x 以外の修飾子やフラグをサポートしているものもあります。 これは、すべての (括弧) を非キャプチャ グループに変更します。 キャプチャするには、名前付きグループを使用する必要があります。
✽ Java には (?d) 修飾子があります (UNIX_LINES オプションでもアクセス可能です)。 これがオンのとき、改行文字 \n は、ドット . (DOTALLがonでない限り改行にマッチしない)、アンカー ^ と $ (マルチラインモードで行頭と行末にマッチする)
✽ Perlには他にもいくつかのフラグがあります。
✽ PCRE には (?J) 修飾子があります (コードでは PCRE_DUPNAMES オプションで利用可能です)。
(direct link)
✽ PCRE には (?U) 修飾子があります (PCRE_UNGREEDY オプションでも利用可能です)。 設定されている場合、数量子はデフォルトで非貪欲です。 2832>(direct link)
✽ PCRE には (?X) 修飾子があります (コード内で PCRE_EXTRA オプションを使っても利用可能です)。 歴史的に、このモードは開発中の新機能を有効にするために使用されてきました。 現時点では、(通常は大文字の B にマッチしますが、文字クラスの外では not-a-word-boundary アサーションになります)
✽ PCRE には、パターンの開始時に設定できる特別な修飾子がいくつかあります (以下に表示します)。 さらに、pcre_compile()関数のファミリーにアクセスできる場合は、多くのオプションを送ることができます。 これらの詳細については、PCRE をダウンロードして、doc フォルダーから pcre_compile.html を入手してください。
(直接リンク)

PCRE の特別なパターン開始修飾子

PCRE には、パターンの開始時に設定できるいくつかの「特別な修飾子」が用意されています。 インラインモディファイアの標準的な (?z) 構文の代わりに、特殊モディファイア構文は (*MYMODIFIER) のような形になります。 これらの修飾子は、PCRE がツールや言語に統合されている場合に特に有用で、 pcre_compile() に送信する多くのオプションを置き換えることができます。
UTF 文字列
PCRE が関連するオプションでコンパイルされていると仮定すると、エンジンに subject 文字列を様々な種類の UTF 文字列として扱うように指示することができます。
✽ (*UTF) は subject を UTF 文字列として扱う汎用方法-それが UTF-8, UTF-16, UTF-32 として扱われるべきかを検出する方法-です。
✽ (*UTF8)、(*UTF16)、(*UTF32)は文字列を3つの特定のUTFエンコーディングとして扱います。
Unicode Properties for \d and \w
By default, \d only matches ASCII digits, but \w only matches ASCII digits, letters and underscores.
(*UCP)修飾子(Unicode Character Propertiesの略)は、これらのトークンがUnicodeの数字と単語文字にマッチすることを可能にします。 \は 1۳۲١८৮੪にマッチします。 Aれま래도ᚠᚱᚩ
(デモ参照)
(*UCP) との組み合わせで、(*UTF) 修飾子の一つも必要かもしれません。

$string = '1۳۲١८৮੪ :: Aれま래도ᚠᚱᚩ';$utfregex = "~\d+ :: \w+~";$utfregex = "~(*UCP)\d+ :: \w+~";$utfregex = "~(*UTF)(*UCP)\d+ :: \w+~";$utfregex = "~(*UTF)\d+ :: \w+~";$utfregex = "~\d+ :: \w+~u";foreach (range(0, 4) as $i) { echo "$i: ".preg_match($utfregex,$string)."<br />"; }// Output:// 0: 0// 1: 0// 2: 1 => (*UTF)(*UCP)// 3: 0// 4: 1 => The u flag produces the same result as (*UTF)(*UCP)

Line Break Modifiers
デフォルトでは、PCREがコンパイルされたときに、.NETがあったときに何を改行とみなすか(dotはdotallモードでなければ改行にマッチしないので)、同様に^と$アンカーがマルチラインモードでどうなるかを教えています。 このデフォルトは、以下の修飾子で上書きすることができます。
✽ (*CR) キャリッジリターンのみを改行とみなす
✽ (*LF) ラインフィードのみを改行とみなす (Unix と同様)
✽ (*CRLF) キャリッジリターンに続けてラインフィードを行うのみである。 Windowsの場合)
✽ (*ANYCRLF) 上記3つのどれでも改行とみなす
✽ (*ANY) ユニコードの改行列はすべて改行とみなす
例えば、次のように。 (*CR)\w+.\Ъは改行とみなされないため、Line1nLine2 にマッチします。 Demo.
Controling \R
By default, the \R metacharacter matches any Unicode newline sequence. UTF-8 モードがオフの場合、これらの改行シーケンスは、キャリッジリターン、ラインフィード、垂直タブ、フォームフィード、または次の行の文字と同様に、 \rn ペアになります。 UTF-8 モードでは、トークンは行区切り文字と段落区切り文字にもマッチします。
2 つの start-of-pattern modifiers で \R の動作を変更できます:
✽ (*BSR_ANYCRLF) で、the \r sequence, \r または \n にのみマッチします。 これはPCREがコンパイルされたとき、またはPCRE_BSR_ANYCRLFオプションで要求されたときにも設定できます
✽ (*BSR_UNICODE) と、 \R は任意のユニコード改行シーケンス(設定されていれば PCRE_BSR_ANYCRLF オプションをオーバーライドします) にマッチします。 これは、PCREがコンパイルされたとき、あるいはPCRE_BSR_UNICODEオプションで要求されたときにも設定することができます
暴走パターンの制御
PCREがmatch()関数を呼ぶ回数を制限するために、(*LIMIT_MATCH=x) 修飾子のxに希望の数をセットして使用します。
Turning Off Optimizations
(direct link)
By default, PCRE has studied the pattern and automatically make a quantified token when the following token is incompatible -for instance turning A+X into A++X. (*NO_AUTO_POSSESS) 修飾子は、この最適化を無効にします。 pcretest を使って 2 つのパターンをベンチマークし、自動的なポゼッションによってすべてのサイクルを節約していることに満足したいときにこれを使います。
デフォルトでは、PCRE はマッチが失敗するかどうかをより速く見つけるためにいくつかの最適化を行ないます。 (*NO_START_OPT) 修飾子はこれらの最適化を無効にします。
空のマッチを無効にする
PCRE2 では、(*NOTEMPTY) は空のマッチを返さないようにエンジンに指示します。 同様に、(*NOTEMPTY_ATSTART) は、サブジェクトの先頭で見つかった空のマッチを返さないようにします。
自動アンカー最適化の無効化
PCRE2 では、PCRE2_NO_DOTSTAR_ANCHOR は、.で始まるパターンを自動的にアンカーしないようエンジンに指示します。

Don’t miss The Regex Style Guide
and The Best Regex Trick Ever!!!


The 1001 ways to use Regex

コメントを残す

メールアドレスが公開されることはありません。