Java正则表达式查找所有匹配项
我需要一些Java正则表达式方面的帮助
我的文本是abc abc abc xyz xyz xyz
。
我需要找到所有在abc
和xyz
以下是应返回的两个匹配项:
abc abc xyz
==>;在abc
和xyz
之间存在abc
abc xyz xyz
==>;在abc
和xyz
之间存在xyz
我的正则表达式模式:
abc\s+([a-z]*?)\s+xyz
它似乎只匹配第一个匹配项,即abc abc xyz
。它找不到abc xyz xyz
什么样的模式适合所有人
# 1 楼答案
在匹配时,您可能需要进行一些修改:
输出:
# 2 楼答案
这是一个可以处理多个空格的正则表达式,它可以告诉您在哪里找到了完整的匹配项,在哪里找到了单词本身,并且不需要重置
Matcher
来继续搜索输出
它的工作原理是只直接匹配前导的
abc
,然后在零宽度正向前瞻中匹配其余部分,捕获整个前瞻匹配,这样就可以构建“完整”匹配。这允许第二个搜索结果开始与之前匹配的单词匹配为了获得额外的积分,它还捕捉了单词本身
然后,您可以选择是想要完整匹配,还是只想要单词
# 3 楼答案
您忘记了分隔符并重复了内部元素。这是一个link for online demo
让内在的元素不那么贪婪
# 4 楼答案
如果你只需要中间的一个单词,而不是完全匹配的as you stated in the comments,你可以使用积极的向后看和积极的向前看,如下所示:
这是一个demo
如果您确实需要完整匹配,或者希望在单词前后有多个空格,您可能需要选中Andreas's answer