Rozwiązaniem (które inne odpowiedzi nie wspominają o — przynajmniej w momencie mojego oryginalnego pisania) jest to, że gdy PHP odnosi się do ograniczników, to nie odnosi się do ograniczników widocznych w kodzie (które są cudzysłowami), ale kolejne znaki w ciągu znaków. (W rzeczywistości nigdy nie widziałem tego nigdzie stwierdził w jakiejkolwiek dokumentacji. Trzeba zobaczyć go w przykładach) Więc zamiast zwykłej składni wyrażeń takich jak to, co może być przyzwyczajony do wielu innych językach:
/something/
PHP używa strun, a następnie wygląda wewnątrz napisu na inny ogranicznika:
'/something/'
separator PHP odnosi się to parę /
znaków, zamiast pary '
znaków. Więc jeśli napiszesz 'something'
, PHP przyjmie s
jako zamierzony separator i narzeka, że nie możesz używać znaków alfanumerycznych jako ogranicznika.
Więc jeśli chcesz przekazać (na przykład) jest i
, aby pokazać, że chcesz case-insensitve mecz, przekazać go wewnątrz łańcucha, ale poza regex ograniczników:
'/something/i'
Jeśli chcesz użyć czegoś innego niż /
jako separatora, można, na przykład, jeśli jesteś pasujące URL i nie chcą mieć do ucieczki wszystkie ukośniki:
'~something~'
Jako notatkę, które mogą być pomocne dla innych, jeśli przechodzą wszystkie swoje argumenty 'preg_match()' jako zmienne, upewnij się, że nie dostać kolejność zmiennych przypadkowo zmieszanych w górę wywołanie funkcji, ponieważ prawie na pewno spowoduje to pojawienie się tego samego błędu. – bluebinary