У меня есть следующая строка
001110000100001100001
и это выражение
/[1]....[1]/g
это делает два матча
но я хочу, чтобы он также соответствовал шаблону между обоими как с lookbehind, так сказать, с перекрытием 1
У меня нет никакого понятия, как это может работать? вместо 0 это могут быть любые символы
Общим трюком является использование техники захвата внутри неизведанного позитивного взгляда. Используйте это регулярное выражение с preg_match_all
:
(?=(1....1))
См. Демо-версию regex
Значения находятся в $matches[1]
:
$re = "/(?=(1....1))/"; $str = "001110000100001100001"; preg_match_all($re, $str, $matches); print_r($matches[1]);
См. Справочное руководство :
Lookaround фактически соответствует символам, но затем отказывается от матча, возвращая только результат: совпадение или отсутствие совпадения. Вот почему их называют «утверждениями». Они не потребляют символы в строке, а только утверждают, возможно ли совпадение или нет.
Если вы хотите сохранить совпадение регулярного выражения внутри lookahead , вы должны поместить скобки вокруг регулярного выражения внутри lookahead , например:
(?=(regex))
.