0

((\d)(\d(?!\2))((?<!\3)\d(?!\3)))\1用来匹配不同的一行排序的任意数字,例如:

234234、345345、359359但不匹配 211211、355355(删除后向断言将匹配这些)

我发现在 PHP 中使用 preg_match() 运行时模式出错,因为偏移量的长度必须固定,但在其他调试器中测试时它可以(在这种情况下我使用 kodos)

preg_match_all():编译失败:后向断言在偏移量 23 处不是固定长度

是否有任何替代模式来匹配上面的排序数字?245245 或其他符合 ABCABC 格式模式的数字。

4

3 回答 3

1

如果 3 位数字必须不同,您可以使用:

((\d)(?!.?\2)(\d)(?!\3)\d)\1

但如果545545允许,您可以使用:

((\d)(?!\2)(\d)(?!\3)\d)\1
于 2013-10-23T03:21:54.073 回答
0

问题是向后看,这把它变成了向前看,似乎对我有用 regex101

((\d)(\d(?!\2))(?!\3)(\d(?!\3)))\1
于 2013-10-23T01:48:46.217 回答
0

只使用前瞻而不是后瞻?

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

正则表达式解释器解释

-------------------------------------------------- ------------------------------
  (分组并捕获到 \1:
-------------------------------------------------- ------------------------------
    (分组并捕获到 \2:
-------------------------------------------------- ------------------------------
      \d 位 (0-9)
-------------------------------------------------- ------------------------------
    ) \2 结尾
-------------------------------------------------- ------------------------------
    (?! 向前看,看看是否没有:
-------------------------------------------------- ------------------------------
      \2 捕获匹配的内容 \2
-------------------------------------------------- ------------------------------
    ) 前瞻结束
-------------------------------------------------- ------------------------------
    (分组并捕获到 \3:
-------------------------------------------------- ------------------------------
      \d 位 (0-9)
-------------------------------------------------- ------------------------------
    ) \3 结尾
-------------------------------------------------- ------------------------------
    (?! 向前看,看看是否没有:
-------------------------------------------------- ------------------------------
      \2 捕获匹配的内容 \2
-------------------------------------------------- ------------------------------
     | 或者
-------------------------------------------------- ------------------------------
      \3 捕获匹配的内容 \3
-------------------------------------------------- ------------------------------
    ) 前瞻结束
-------------------------------------------------- ------------------------------
    \d 位 (0-9)
-------------------------------------------------- ------------------------------
  ) \1 结尾
-------------------------------------------------- ------------------------------
  \1 捕获匹配的内容 \1
于 2013-10-23T01:50:42.463 回答