【问题标题】:why is this regular expression returning only one match?为什么这个正则表达式只返回一个匹配项?
【发布时间】:2012-10-16 21:33:57
【问题描述】:

这是我的输入:

xxx999xxx888xxx777xxx666yyy

xxx222xxx333xxx444xxx555yyy

这是表达式:

xxx.*xxx(?<matchString>(.(?!xxx.*xxx))*?)xxx.*yyy

它返回 444

我希望它同时返回 444 和 777,但我对此无能为力。

我有 ! 排除项,因此它只匹配左侧最里面的内容(当我只搜索一个结果时效果很好,这是大多数时候)。但是,我有一种感觉,这与它在这种情况下跳过第一个结果的原因有关。我不知道从这里去哪里。

我一直在这里测试: http://regexlib.com/RETester.aspx(启用“SingleLine”和“Explicit Capture”)

任何建议将不胜感激!

【问题讨论】:

标签: c# .net regex regex-greedy non-greedy


【解决方案1】:

首先我想解释一下为什么您当前的解决方案不起作用:

由于您启用了SingleLine 选项,.* 匹配 999xxx888xxx777xxx666yyy\nxxx222xxx333,括号中的模式匹配 444,其余的正则表达式匹配 xxx555yyy

所以要同时匹配777444,您可以禁用SingleLine 选项或使用类似这样的选项:

xxx\d+xxx\d+xxx(?<matchString>\d+)xxx\d+yyy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多