正则表达式以匹配多次出现的IFF另一个字符串出现

时间:2019-06-04 20:58:35

标签: java regex

我真的希望可以在正则表达式中解决此问题,但我担心不会。...

我正在寻找一个正则表达式,它将返回一个术语的多个匹配项,只有另一个术语出现在同一字符串中。用一个例子可以更好地解释这一点。考虑:

The numbers are 144, 424, and 345. Not 45.

我只想匹配“ 144”,“ 424”和“ 345”。 (任何3位数字)-但如果在其之前的某个位置使用了“ 数字”一词,则为。因此,下面是其他示例:

The numbers we are looking for: 234 & 992

仅应返回“ 234”和“ 992”。

以下句子不应与任何内容匹配:

Some examples: 234, 244 and 12

我以为我使用了以下正则表达式:

(?<=numbers\b)(?:.|\n)*?\b(\d{3})\b

但是它只匹配第一个数字。我正在努力实现的目标是否可能?在此似乎无法进行先行或后退的方式。出于种种原因,我仅限于仅使用一个正则表达式表达式,事后我无法选择访问各个捕获组。因此,寻找纯正则表达式方法!

1 个答案:

答案 0 :(得分:4)

您可以将此正则表达式与\G一起使用:

(?:\bnumbers\b|(?!^)\G).*?\b(\d{3})\b

RegEx Demo

  • \G在上一场比赛的末尾或首场比赛的字符串开头声明位置。
  • (?!^)避免在行首匹配\G