以下是我的意见:
xxx999xxx888xxx777xxx666yyy
xxx222xxx333xxx444xxx555yyy
这是表达式:
xxx.*xxx(?<matchString>(.(?!xxx.*xxx))*?)xxx.*yyy
它返回 444 。
我希望它能同时返回444和777,但我不能随便找到它。
我有!排除,因此它只匹配左侧的最里面(当我只搜索一个结果时,这很有效,大部分时间都是如此)。但是,我感觉这与它在此实例中跳过第一个结果的原因有关。我不知道从哪里开始。
我一直在这里测试: http://regexlib.com/RETester.aspx(已启用“SingleLine”和“Explicit Capture”)
任何建议都将不胜感激!
答案 0 :(得分:5)
首先,我想解释一下为什么你当前的解决方案不起作用:
由于您已启用SingleLine
选项,.*
匹配999xxx888xxx777xxx666yyy\nxxx222xxx333
,括号中的模式与444
匹配,其余正则表达式匹配xxx555yyy
为了匹配777
和444
,您可以禁用SingleLine
选项或使用以下内容:
xxx\d+xxx\d+xxx(?<matchString>\d+)xxx\d+yyy