RegexOptions.Multilineを指定すると、正規表現エンジンは複数行モードで動作するようになります。 複数行モードでは、文字列の先頭・末尾を表す正規表現要素^
, $
が、それぞれ行頭・行末にもマッチするようになります。
次の例では、正規表現を用いて行頭の空白を削除しています。 同じ正規表現を用いていても、RegexOptions.Multilineを指定した場合とそうでない場合で結果が異なっている点に注目してください。
RegexOptions.Multilineを指定して複数行モードでパターンマッチングを行う
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = @"static void Main() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(i);
}
}";
// 行頭(^)に続く空白を空文字に置き換えて削除する
// (複数行モードなので"^"はすべての行頭にマッチする)
Console.WriteLine("[Regex.Replace(RegexOptions.Multiline)]");
Console.WriteLine(Regex.Replace(text, @"^\s+", string.Empty, RegexOptions.Multiline));
Console.WriteLine();
// 文字列の先頭(^)に続く空白を空文字に置き換えて削除する
// (複数行モードではないので"^"は文字列の先頭にしかマッチしない)
Console.WriteLine("[Regex.Replace(RegexOptions.None)]");
Console.WriteLine(Regex.Replace(text, @"^\s+", string.Empty, RegexOptions.None));
}
}
実行結果
[Regex.Replace(RegexOptions.Multiline)] static void Main() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } } [Regex.Replace(RegexOptions.None)] static void Main() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } }
RegexOptions.Multilineを指定した場合に動作が変わる正規表現要素と、その動作の違いについての詳細は、.NET Frameworkで使用できる正規表現 §.RegexOptions.Multilineと^, \Aの動作の違いおよび.NET Frameworkで使用できる正規表現 §.RegexOptions.Multilineと$, \z, \Zの動作の違いを参照してください。