preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
wynik jest AA
, ale muszę AA
i BB
.PHP: preg_match regex nie znajdując właściwe struny
preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
wynik jest AA
, ale muszę AA
i BB
.PHP: preg_match regex nie znajdując właściwe struny
W [\s]{1}
sekwencje * używasz dopasować białymi nakładania między meczów. Końcowa przestrzeń po "AA "
jest tą samą przestrzenią, co wcześniejsza niż " BB"
. Dowolny znak można dopasować tylko jeden raz, więc po zeskanowaniu znajdzie " AA "
przeszukuje tylko pozostały ciąg znaków "BB "
i nie uda się go znaleźć.
Zamiast tego wypróbuj sekwencję ucieczki z granicą wyrazu \b
. Dopasowuje początki i końce słowach, ale w rzeczywistości nie spożywać żadnych znaków, dzięki czemu można dopasować kilka razy:
preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches);
Korzystanie \b
ma dodatkowy efekt, że nie wymaga dodatkowych spacji trzeba było otaczający swój ciąg. Możesz po prostu przekazać 'AA BB'
zamiast ' AA BB '
, jeśli chcesz.
* Nawiasem mówiąc, [\s]{1}
to samo, co [\s]
, który jest taki sam jak zwykły \s
. Nie ma potrzeby stosowania kwadratowych lub nawiasów klamrowych.
Problem polega na tym, że próbujesz dwukrotnie dopasować to samo miejsce. Korzystanie spojrzeć na przodzie (= s \) powinna pomóc:
preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches);
Można zrobić pozytywny wygląd opóźnieniem:
/(?<=\s)(AA|BB|CC)+\s/
zasoby:
Słowo granica będzie również dopasowanie (np.) 'AA; BB; CC', które mogą być fałszywie dodatnie. – Matthew