C#の正規表現におけるアンカーとは?種類と使い方をわかりやすく解説
アンカー(Anchor)とは、C#の正規表現において使用される特殊な構成要素の一つです。アンカー自体は任意の文字にマッチするのではなく、文字列内の現在位置に基づいて、その位置でマッチが成立するかどうかを判定します。これにより、「行頭にある場合のみ」「単語の境界でのみ」といった、位置に依存した柔軟なパターンマッチングが可能になります。
正規表現のアンカー一覧
以下の表に、C#で利用できる主なアンカー(アサーション)とその動作、パターン例、マッチ結果をまとめました。
| アサーション | 説明 | パターン | マッチ例 |
|---|---|---|---|
| ^ | マッチは文字列または行の先頭で開始する必要があります。 | ^\d{3} | "567-777-" 内の "567" |
| $ | マッチは文字列の末尾、または行末・文字列末尾の \n の直前で発生する必要があります。 | -\d{4}$ | "8-12-2012" 内の "-2012" |
| \A | マッチは文字列の先頭で発生する必要があります。 | \A\w{3} | "Code-007-" 内の "Code" |
| \Z | マッチは文字列の末尾、または文字列末尾の \n の直前で発生する必要があります。 | -\d{3}\Z | "Bond-901-007" 内の "-007" |
| \z | マッチは文字列の末尾で発生する必要があります。 | -\d{3}\z | "-901-333" 内の "-333" |
| \G | マッチは前回のマッチが終了した位置で発生する必要があります。 | \G\(\d\) | "(1)(3)(5)[7](9)" 内の "(1)"、"(3)"、"(5)" |
| \b | マッチは \w(英数字)と \W(非英数字)の境界上で発生する必要があります。 | \w | "Room#1" 内の "R"、"o"、"m"、"1" |
| \B | マッチは \b の境界上では発生してはなりません(非境界であることが条件)。 | \Bend\w*\b | "end sends endure lender" 内の "ends"、"ender" |
アンカーを使う際のポイント
「^」と「\A」、「$」と「\Z」の違い
「^」や「$」はデフォルトでは行単位の先頭・末尾を表しますが、RegexOptions.Multiline オプションを指定しない場合は文字列全体に対して適用されます。一方、「\A」および「\z」はオプションに関係なく、常に文字列全体の先頭・末尾のみを対象とします。複数行テキストを扱う場合は、この違いを意識して使い分けることが重要です。
「\Z」と「\z」の違い
「\Z」は文字列末尾が改行コード(\n)で終わっている場合、その改行の直前にもマッチできますが、「\z」は改行の有無にかかわらず文字列の最後尾でしかマッチしません。厳密に末尾を判定したい場合は「\z」を使用するとよいでしょう。
単語境界「\b」の活用
「\b」は特定の文字ではなく位置にマッチするため、完全一致の単語検索などに非常に便利です。たとえば \bcat\b というパターンを使えば、"category" の一部としての "cat" は除外し、独立した単語 "cat" だけを抽出できます。
アンカーを正しく理解して使いこなすことで、文字列の検索・置換・バリデーションの精度を大幅に向上させることができます。
-
JavaScriptの関数式(Function Expression)とは?特徴と使い方を解説
JavaScriptにおける関数式(Function Expression)とは、関数を変数に代入して定義する方法のことです。代入された関数は、その変数名を使って後から呼び出すことができます。 関数式の主な特徴 関数を変数に格納し、変数名を指定して呼び出せる 通常の関数宣言(function declaration)と異なり、ホイスティング(巻き上げ)が行われないため、定義よりも前に呼び出すことはできない 多くの場合、名前を持たない「無名関数(匿名関数)」として定義される コールバック関数や即時実行関数(IIFE)など、さまざまな場面で活用できる この「ホイスティングされない」という点が重
-
Rubyの正規表現(Regex)を徹底解説!基礎から実践テクニックまで
Rubyの正規表現(ruby regex)は、文字列の中から特定のパターンを見つけ出し、データを抽出してさらに処理を行うための強力なツールです。 正規表現の代表的なユースケースとしては、大きく分けて「バリデーション(検証)」と「パース(解析)」の2つがあります。 たとえば、メールアドレスを考えてみましょう。Rubyの正規表現を使えば、「有効なメールアドレスとはどのような形式か」を定義できます。つまり、プログラムが有効なメールアドレスと無効なものを自動的に判別できるようになるのです。 Rubyでは、正規表現を2つのスラッシュ(/)で囲んで定義します。これにより、他の構文と区別されます。最もシン