C#の正規表現で使えるグループ化構成要素をわかりやすく解説
正規表現は、文字クラス、演算子、そしてさまざまな構成要素を組み合わせて定義します。その中でもグループ化構成要素(Grouping Constructs)は、正規表現の一部である「部分式」をまとめて扱い、入力文字列から該当する部分文字列をキャプチャするために使用される重要な機能です。
グループ化構成要素の一覧
下の表に、C#の正規表現で利用できる主なグループ化構成要素と、それぞれのパターンおよび一致例をまとめました。
| グループ化構成要素 | 説明 | パターン | 一致例 |
|---|---|---|---|
| ( subexpression ) | マッチした部分式をキャプチャし、0から始まる序数を割り当てます。 | (\w)\1 | "deep" 内の "ee" |
| (?< name >subexpression) | マッチした部分式を、名前付きグループとしてキャプチャします。 | (?< double>\w)\k< double> | "deep" 内の "ee" |
| (?< name1 -name2 >subexpression) | 均衡グループ定義を定義します。 | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "3+2^((1-3)*(3-1))" 内の "((1-3)*(3-1))" |
| (?: subexpression) | 非キャプチャ グループを定義します。 | Write(?:Line)? | "Console.WriteLine()" 内の "WriteLine" |
| (?imnsx-imnsx:subexpression) | subexpression の範囲内で、指定したオプションを有効または無効にします。 | A\d{2}(?i:\w+)\b | "A12xl A12XL a12xl" 内の "A12xl"、"A12XL" |
| (?= subexpression) | 幅ゼロの肯定先読みアサーションです。 | \w+(?=\.) | "He is. The dog ran. The sun is out." 内の "is"、"ran"、"out" |
| (?! subexpression) | 幅ゼロの否定先読みアサーションです。 | \b(?!un)\w+\b | "unsure sure unity used" 内の "sure"、"used" |
| (?< =subexpression) | 幅ゼロの肯定後読みアサーションです。 | (?< =19)\d{2}\b | "1851 1999 1950 1905 2003" 内の "51"、"03" |
| (?< ! subexpression) | 幅ゼロの否定後読みアサーションです。 | (?< !19)\d{2}\b | "1851 1999 1950 1905 2003" 内の "51"、"03" 以外の2桁の数値 |
| (?> subexpression) | バックトラックを行わない(「最長一致」の)部分式です。 | [13579](?>A+B+) | "1ABB 3ABBC 5AB 5AC" 内の "1ABB"、"3ABB"、"5AB" |
各構成要素を使いこなすポイント
- キャプチャ グループ:番号または名前で参照できるため、置換処理や後方参照で威力を発揮します。不要なキャプチャを避けたい場合は非キャプチャ グループ
(?: )を使いましょう。 - 先読み・後読みアサーション:
(?= )や(?! )、(?<= )、(?<! )は位置だけを判定し、一致結果に含めません。「特定の文字列の前後」という条件を柔軟に指定できます。 - オプションの局所適用:
(?i: )のように記述すると、大文字小文字の区別などを一部分だけ変更でき、パターン全体の動作に影響を与えません。 - アトミック グループ:
(?> )はバックトラックを禁止するため、意図しない一致やパフォーマンス低下を防ぎたい場合に有効です。
-
JavaScriptの正規表現修飾子(g・i・m)をサンプルコード付きで解説
JavaScriptの正規表現修飾子とは JavaScriptの正規表現における修飾子(フラグ)とは、パターンリテラルの末尾に付加することで検索の挙動を変更できる、省略可能な指定のことです。これを使うことで、大文字と小文字を区別しない検索や文字列全体を対象としたグローバル検索などが簡単に実現できます。さらに、複数の修飾子を組み合わせて指定することも可能です。 主な修飾子の一覧 修飾子説明 gグローバルマッチングを有効にします。最初の一致で処理を止めず、マッチしたすべての結果を返します。 i大文字と小文字を区別しない(ignore case)マッチングを有効にします。 m複数行(mul
-
JavaScriptのグループ化演算子とは?優先順位の制御方法をサンプルコードで解説
グループ化演算子とはJavaScriptのグループ化演算子は、丸括弧「()」で表され、式を評価する際の優先順位を制御するために使用されます。通常、演算子にはあらかじめ決められた優先順位があり、乗算(*)や除算(/)は加算(+)や減算(-)よりも先に評価されます。しかし、グループ化演算子で式を囲むことで、この優先順位を意図的に変更し、囲まれた部分を最優先で計算させることができます。例えば「2+2*5/22」という式の場合、標準の優先順位では乗算・除算が先に実行されますが、丸括弧を使うことで「(2+2)*5/22」のように加算を先に行わせることが可能です。サンプルコード以下は、JavaScript