正则表达式跳过比赛

时间:2013-09-04 01:03:07

标签: c# regex

我正在尝试在字符串中选择多个匹配项,如下所示:

  

123
  等等
  END
  45个
  等等
  END

理想情况下,我希望它返回2个以数字序列开头并以END字符串结尾的匹配。我使用以下内容:

Regex splitter = new Regex(@"^\d{2,3}(.*)END", RegexOptions.Singleline);
foreach (Match res in splitter.Matches(content))
{
   Console.WriteLine(res.ToString());
}

但是上面的模式是在一次匹配中返回整个输入字符串。我觉得这与“单线”选项有关。我做错了什么?

1 个答案:

答案 0 :(得分:5)

*量词更改为延迟格式(使用(.*?)语法)。目前,它尝试在字符串中匹配许多符号 - 并且成功地执行此操作,当然,因为您有几个以END结尾的块。

添加?后,引擎会尝试将模式与少数符号匹配,在遇到第一个END之前完成(.*?)匹配。