Sto*_*omp 10 regex greedy non-greedy alternation regex-greedy
我认为默认情况下我的正则表达式会展示我想要的贪婪行为,但它不在以下代码中:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
Run Code Online (Sandbox Code Playgroud)
现在我意识到,如果我只是按照长度降序对关键字进行排序,我可以让它为这个小例子工作
所以我的问题是:为什么这是懒惰的,我该如何解决?
看起来你正试图说出破碎的东西.要做到这一点,你需要整个表达式是正确的,你当前的表达式不是.试试这个......
new Regex(@"\b(in|int|into|internal|interface)\b");
Run Code Online (Sandbox Code Playgroud)
"\ b"表示匹配字边界,并且是零宽度匹配.这是依赖于语言环境的行为,但通常这意味着空格和标点符号.作为零宽度匹配,它将不包含导致正则表达式引擎检测字边界的字符.