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))
这就是我要找的,这里的所有答案都很好,但为了将来的安全,我选择了匹配每组