我有以下文字:
“猫狗鼠狮”
然后我使用正则表达式搜索“dog”或“mouse”:
Regex regex = new Regex(@"dog|mouse");
C# 中 Regex 的行为方式是它首先一直搜索单词 dog。如果找到匹配项,它将停止。在正则表达式中找到我的任何单词第一次出现后如何让它停止,意思是在“猫”之后停止,因为这首先发生?
我是否必须进行多次正则表达式搜索并匹配结果的索引?或者是否可以在正则表达式中指定它?
请您参考如下方法:
不,你错了。
Regex regex = new Regex(@"dog|mouse");
和
Regex regex = new Regex(@"mouse|dog");
两者都会找到“dog”这个词,即使在第二种情况下“mouse”这个词是交替中的第一个。
匹配行为与您描述的不同。正则表达式将检查第一个字符是否可以匹配第一个替代项,如果不匹配,它不会继续到第二个字符,它将尝试第二个替代项。
但是,交替的顺序在另一方面很重要。你会遇到问题,当你有相同开头的替代品并且你将它们从短到长排序时,例如
Regex regex = new Regex(@"Foo|Foobar");
这永远不会匹配单词“Foobar”,因为即使文本中有 Foobar,它也会匹配第一个替代项“Foo”。
为了避免这些问题,从长到短排序
Regex regex = new Regex(@"Foobar|Foo");
这将尝试在“Foo”上匹配“Foobar”,当它识别出后面没有“b”时,它会尝试第二种选择并成功匹配“Foo”。
