正規表現におけるエスケープ文字、文字クラス、量指定子、アンカーの使い方特集:C#正規表現チートシート(3/3 ページ)

» 2017年10月27日 05時00分 公開
[かわさきしんじInsider.NET編集部]
前のページへ 1|2|3       

アンカー

 最後に「アンカー」についても簡単に触れておこう。アンカーとは入力文字列内での位置を示すもので「入力の先頭」「入力の末尾」「単語境界」などを表現できる。

アンカー 説明
^ 文字列または行の先頭
$ 文字列または行の末尾
\A 文字列の先頭
\Z 文字列の末尾または文字列の末尾にある\nの直前
\z 文字列の末尾
\G 前回のマッチの終了箇所
\b 単語境界
\B 単語境界以外
アンカー

 「^」「$」が「文字列または行」を対象としているが、これは複数行を入力とした場合にその各行がマッチの対象となることを意味している。ただし、複数行入力を有効にするには、RegexOptions.Multilineオプションを指定する必要がある。以下に例を示す。これは「^」と「$」を使って、複数行入力が無効/有効な場合にマッチがどう変わるかを試したものだ。

string input = "abc foo\nxyz bar\nabc baz";
string pattern = @"^abc.*";
Console.WriteLine("match ^abc.*");
Console.WriteLine("without RegexOptions.Multiline");
foreach (Match m in Regex.Matches(input, pattern))
{
  Console.WriteLine(m);
}
Console.WriteLine("with RegexOptions.Multiline");
foreach (Match m in Regex.Matches(input, pattern, RegexOptions.Multiline))
{
  Console.WriteLine(m);
}
pattern = @".*a[rz]$";
Console.WriteLine("match .*a[rz]$");
Console.WriteLine("without RegexOptions.Multiline");
foreach (Match m in Regex.Matches(input, pattern))
{
  Console.WriteLine(m);
}
Console.WriteLine("with RegexOptions.Multiline");
foreach (Match m in Regex.Matches(input, pattern, RegexOptions.Multiline))
{
  Console.WriteLine(m);
}

アンカーの使用例

 実行結果は次のようになる。

実行結果 実行結果

 RegexOptions.Multilineオプションを指定した場合には、各行の先頭あるいは末尾でもマッチが発生していることが分かる。

 これに対して、「\A」「\Z」「\z」はRegexOptions.Multilineオプションを指定しても、先頭行の先頭、あるいは最終行の末尾以外ではマッチが発生しない。以下に実行結果を示す(コードは「^」「$」を書き直すだけなので割愛)。

「\A」「\Z」を使用した場合の実行結果 「\A」「\Z」を使用した場合の実行結果

 単語境界については、次回以降で取り上げるタイミングがあれば、紹介することにしよう。


 今回はC#で正規表現を扱う際の基本の語彙ともいえるエスケープ文字、文字クラス、量指定子、アンカーについて見た。次回は、より高度な正規表現を記述するために使える各種の構成体について見ていこう。

「特集:C#正規表現チートシート」のインデックス

特集:C#正規表現チートシート

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。