Java Regex负向前瞻错误匹配

时间:2014-05-17 19:52:18

标签: 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是匹配。为什么?我如何寻找我需要的字符串?

1 个答案:

答案 0 :(得分:1)

这更简单。

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

请参阅demo

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