Java正则表达式否定前瞻错误匹配

标签 java regex string regex-lookarounds

我正在寻找空格字符后面的数字中出现前两个数字(以任何顺序)的字符串。首先我尝试了

(\d)(\d)\s\d*(\1|\2)\d*[\1\2&&[^\3]][\d]*

但似乎我不能将括号与反向引用一起使用。我尝试使用前瞻功能来代替

(\d)(\d)\s\d*(\1|\2)\d*(?!\3(\1|\2))\d*

但我错了。这个想法是“查找两个数字,后跟一个空格,后跟零个或多个数字,后跟捕获的数字之一,后跟零个或多个数字,后跟捕获的数字之一(不是我之前得到的数字),后跟零个或多个数字”。21 20329 是一个匹配项。为什么?我如何查找我需要的字符串?

最佳答案

这更简单。

^(\d)(\d) (?=.*?\1)(?=.*?\2)\d+

参见demo

  1. 第一个前瞻确保第 1 组捕获的数字出现在字符串后面的某个位置。
  2. 第二个前瞻确保第 2 组捕获的数字出现在字符串后面的某个位置。
  3. 如果满足这些条件,\d+ 会吃掉空格后的所有数字。

关于Java正则表达式否定前瞻错误匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715490/

相关文章:

ruby - PBXProject 文件的正则表达式

PHP:正则表达式 preg_replace_callback 匹配 PHP 中的所有数字

c++ - 在线程之间发送和读取字符串

java - 如何动态实例化引用其他类的类

java - 如何使用 HL7 监听器配置 Apache Camel 并部署在 Tomcat 中

java - 正则表达式中的多组匹配

python - 如何将字符串中的数字引用转换为 Python 中的整数?

c++ - 将 int 和字符串值映射到 Map<Integer, List<String>>

java - 在 Android 上读取内部文件的最佳方式?

java - 如何使用libgdx在一个舞台上连续显示三个图像