最後に「アンカー」についても簡単に触れておこう。アンカーとは入力文字列内での位置を示すもので「入力の先頭」「入力の末尾」「単語境界」などを表現できる。
アンカー | 説明 |
---|---|
^ | 文字列または行の先頭 |
$ | 文字列または行の末尾 |
\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オプションを指定しても、先頭行の先頭、あるいは最終行の末尾以外ではマッチが発生しない。以下に実行結果を示す(コードは「^」「$」を書き直すだけなので割愛)。
単語境界については、次回以降で取り上げるタイミングがあれば、紹介することにしよう。
今回はC#で正規表現を扱う際の基本の語彙ともいえるエスケープ文字、文字クラス、量指定子、アンカーについて見た。次回は、より高度な正規表現を記述するために使える各種の構成体について見ていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.