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

标签 java regex

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

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

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

我只想匹配“144”、“424”和“345”。 (任何 3 位数字)- 但如果他们之前在某处跟在术语“numbers”之后。所以下面的附加示例:

The numbers we are looking for: 234 & 992

应该只返回“234”和“992”。

下面的句子不应该匹配任何东西:

Some examples: 234, 244 and 12

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

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

但它只匹配第一个数字。我想要实现的目标有可能实现吗?前瞻或后视的方式似乎在这里不起作用。出于各种原因,我仅限于这只是一个正则表达式,而且我没有选择在事后选择性地访问单个捕获组的选项。所以寻找一个纯正则表达式的方法!

最佳答案

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

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

RegEx Demo

  • \G 断言位置在前一个匹配项的末尾或第一个匹配项的字符串开头。
  • (?!^) 避免在行首匹配 \G

关于java - 匹配另一个字符串多次出现的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451273/

相关文章:

java - 如何将 list<String> 转换为 DefaultMutableTreeNode?

javascript - 如何在没有后视的情况下匹配 '+abc' 而不是 '++abc'?

regex - VS Code 多行搜索和替换 HTML/XML 标签?

c# - -10 和 10 之间的值的正则表达式,最多 1 个小数位

Javascript 正则表达式按以模式开头的行进行分割

regex - 文本消息与数千个正则表达式的高效匹配

java - 在连接池中获取 SQLException 错误

java - 如果 System s = null 那么下面的输出是什么

java - Android 使用套接字时崩溃

java - SQLiteDatabase getWritableDatabase() { 抛出新的 RuntimeException ("Stub!"); }