Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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 PCRE正则表达式重叠匹配_Php_Regex - Fatal编程技术网

Php PCRE正则表达式重叠匹配

Php PCRE正则表达式重叠匹配,php,regex,Php,Regex,我有以下字符串 001110000100001100001 这个表达式呢 /[1]....[1]/g 这是两场比赛 但我希望它也能匹配这两个元素之间的模式,也就是说,重叠的1 我完全不知道,这怎么行?它可以是任何字符,而不是0。一个常见的技巧是在未编排的正向前瞻中使用捕获技术。将此正则表达式与preg\u match\u all一起使用: (?=(1....1)) 看 委员会: 见: Lookaround实际上匹配字符,但随后放弃匹配,只返回结果:匹配或不匹配。这就是为什么它们被称为“断

我有以下字符串

001110000100001100001
这个表达式呢

/[1]....[1]/g
这是两场比赛

但我希望它也能匹配这两个元素之间的模式,也就是说,重叠的1


我完全不知道,这怎么行?它可以是任何字符,而不是0。一个常见的技巧是在未编排的正向前瞻中使用捕获技术。将此正则表达式与
preg\u match\u all
一起使用:

(?=(1....1))

委员会:

见:

Lookaround实际上匹配字符,但随后放弃匹配,只返回结果:匹配或不匹配。这就是为什么它们被称为“断言”。它们不使用字符串中的字符,而只声明匹配是否可能

如果要将正则表达式的匹配项存储在前瞻中,则必须在前瞻中的正则表达式周围放置捕获括号,如下所示:
(?=(regex))


您还可以使用lookback中的
\K
功能(指返回结果的起始位置)执行此操作:

(?<=\K1)....1

(?
/(模式)(.*)\1/
使用此选项并获取第二个捕获的组值。无需查找。如果需要完全匹配,请尝试(?:?)。?(?非常感谢,我已经用积极的前瞻性玩了arround,但做得不对,这很好,而且解释得很好。这是天才。这是我用正则表达式见过的最聪明的事情之一。谢谢!为我节省了很多时间。
(?<=\K1)....1
$str = '001110000100001100001';

preg_match_all('~ (?<= \K 1 ) .... 1 ~x', $str, $matches);

print_r($matches[0]);