Mam następujący ciąg
001110000100001100001
i to wyrażenie
/[1]....[1]/g
to sprawia, że dwa 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 № 1Powszechną 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))
.