/ Dopasowywanie wyrażeń regularnych / PCRE - php, regex

Wyrażenia regularne PCRE nakładające się na siebie - php, regex

Mam następujący ciąg

001110000100001100001

i to wyrażenie

/[1]....[1]/g

to sprawia, że ​​dwa mecze

mecze

ale chcę, aby pasowało to również do wzoru między tymi oboma, które można powiedzieć, nakładającymi się na siebie 1

nie mam absolutnie pojęcia, jak to może działać? zamiast 0 mogą to być dowolne znaki

Odpowiedzi:

5 dla odpowiedzi № 1

Powszechną sztuczką jest użycie techniki przechwytywania wewnątrz niezakotwionego pozytywnego spojrzenia w przód. Użyj tego wyrażenia regularnego z preg_match_all:

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

Widzieć regex demo

The wartości są w $matches[1]:

$re = "/(?=(1....1))/";
$str = "001110000100001100001";
preg_match_all($re, $str, $matches);
print_r($matches[1]);

Widzieć odniesienie do antycypacji:

Wygląd faktycznie pasuje do postaci, ale potemrezygnuje z dopasowania, zwracając tylko wynik: dopasowanie lub brak dopasowania. Dlatego nazywane są „twierdzeniami”. Nie zużywają znaków w ciągu, a jedynie stwierdzają, czy dopasowanie jest możliwe, czy nie.

Jeśli chcesz zapisać dopasowanie wyrażenia regularnego w ramach lookahead, musisz umieść przechwytywanie nawiasów wokół wyrażenia regularnego wewnątrz lookahead, lubię to: (?=(regex)).