デフォルトでは、私の正規表現は私が望む貪欲な動作を示すと思いましたが、次のコードにはありません:
Regex keywords = new Regex(@"in|int|into|internal|interface");
var targets = keywords.ToString().Split('|');
foreach (string t in targets)
{
Match match = keywords.Match(t);
Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
}
出力:
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
単純にキーワードを長さの降順で並べ替えれば、この小さな例でも機能することがわかりましたが、
- これが期待どおりに機能しない理由を理解したいのですが、
- 私が取り組んでいる実際のプロジェクトでは、正規表現にさらに多くの単語が含まれており、それらをアルファベット順に保つことが重要です。
だから私の質問は、なぜこれが怠惰なのか、どうすれば修正できるのか?