Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式:查找后面的资产_Php_Regex - Fatal编程技术网

Php 正则表达式:查找后面的资产

Php 正则表达式:查找后面的资产,php,regex,Php,Regex,我使用((\d)(\d(?!\2))((?来匹配不同于一行排序的任意数字,如: 234234、345345、359359但不匹配211211、355355(删除Lookback assertation将匹配这些) 在PHP中使用preg_match()运行时,我发现该模式出现错误,因为偏移量的长度必须固定,但在其他调试程序中测试时,该模式正常(在本例中,我使用kodos) preg_match_all():编译失败:Lookback断言在偏移量23处不是固定长度 是否有任何模式可供选择,以匹配?

我使用
((\d)(\d(?!\2))((?来匹配不同于一行排序的任意数字,如:

234234、345345、359359但不匹配211211、355355(删除Lookback assertation将匹配这些)

在PHP中使用preg_match()运行时,我发现该模式出现错误,因为偏移量的长度必须固定,但在其他调试程序中测试时,该模式正常(在本例中,我使用kodos)

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


是否有任何模式可供选择,以匹配?245245以上的排序数字或符合ABCABC格式模式的其他数字。

问题在于向后看,这将它变成向前看,似乎对我有效


只需使用“向前看”而不是“向后看”

((\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
如果3位数字必须不同,则可以使用:

((\d)(?!.?\2)(\d)(?!\3)\d)\1
((\d)(?!\2)(\d)(?!\3)\d)\1
但如果允许使用
545545
,则可以使用:

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

出于好奇,请您解释一下
((\d)(!.?\2)(\d)(!\3)\d中的
是如何工作的,我不明白:/@Enissay:
是一个可选字符,那么断言
(?!.?\2)
相当于
(?!(?:\2|.\2))
并检查第二个数字是否不相同,第三个数字是否不相同。
(?!。?\2)相当于(?)(?:\2 |。\2))
这就是我要找的,这里的所有答案都很好,但为了将来的安全,我选择了匹配每组