这是为什么正则表达式返回只有一个匹配?(why is this regular expression

2019-11-01 03:29发布

这是我输入:

xxx999xxx888xxx777xxx666yyy

xxx222xxx333xxx444xxx555yyy

这是表达:

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

它返回444。

我想它同时返回444和777,但我不能这样是行不通的。

我有 排除,使其只在左侧(当我搜索结果只有一个,这是大多数时间它的伟大工程),最里面的匹配。 但是,我有一种感觉,这是关系到为什么它是跳跃在这种情况下的第一个结果。 我不知道在哪里可以从这里走。

我一直在测试的位置: http://regexlib.com/RETester.aspx (用“单线”和“显式捕捉”启用)

任何意见,将不胜感激!

Answer 1:

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

既然你已经启用了SingleLine选项.*匹配999xxx888xxx777xxx666yyy\nxxx222xxx333 ,括号中的模式匹配444 ,和您正则表达式的其他部分相匹配xxx555yyy

因此,要同时匹配777444 ,你可以禁用SingleLine选项或使用这样的:

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


文章来源: why is this regular expression returning only one match?