RegexOptions.RightToLeftを用いると、正規表現エンジンの文字列探索方向を「左から右」ではなく「右から左」、つまり文字列の末尾から先頭への方向へ逆転することができます。 これは、文字列の先頭から末尾へ探索するString.IndexOfに対して、String.LastIndexOfを用いて文字列の末尾から先頭へ探索するように変えることに相当します。
RegexOptions.RightToLeftを指定して正規表現の探索方向を文字列の末尾から先頭の方向へ反転する
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = "The quick brown fox jumps over the lazy dog";
Console.WriteLine(text);
Console.WriteLine();
// 3文字の単語をすべて列挙する
// RegexOptions.RightToLeftを指定しているので、文字列の後側にあるものから列挙される
Console.WriteLine("[RegexOptions.RightToLeft]");
foreach (Match m in Regex.Matches(text, @"\b\w{3}\b", RegexOptions.RightToLeft)) {
Console.WriteLine(m.Value);
}
// 3文字の単語をすべて列挙する
// RegexOptions.RightToLeftを指定していないので、文字列の先頭にあるものから列挙される
Console.WriteLine("[RegexOptions.None]");
foreach (Match m in Regex.Matches(text, @"\b\w{3}\b", RegexOptions.None)) {
Console.WriteLine(m.Value);
}
}
}
実行結果
The quick brown fox jumps over the lazy dog [RegexOptions.RightToLeft] dog the fox The [RegexOptions.None] The fox the dog
RegexOptions.RightToLeftはあくまで探索方向を反転するものであって、正規表現の解釈方向を反転するものではありません。 RegexOptions.RightToLeftを指定しても正規表現の末尾側からマッチすることはありません。
RegexOptions.RightToLeftの指定によってキャプチャされる順序も逆転します。 キャプチャについては正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.キャプチャ(Captureクラス)を参照してください。