[oraz] są znakami specjalnymi w wyrażeniu regularnym. Służą do wyświetlania znaków z meczu. [a-z]
dopasowuje każdą małą literę między "a" i "z". [03b]
dopasowuje "0", "3" lub "b". Aby dopasować znaki "[" i "]", musisz uciec przed nimi z poprzedzającym \
.
Twój kod mówi "zastąp dowolny znak []().
pustym łańcuchem" (zmiana kolejności od kolejności, w której zostały wpisane dla jasności).
Chciwy dopasowania:
preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]
Chciwy mecz pasowały wielu [S i S]. To wyrażenie zajmie an example [of "sneaky"] text [with more "sneaky"] here
i zmieni go w an example here
.
Perl ma składnię dla non-chciwych meczu (najprawdopodobniej nie chcą być chciwym):
preg_replace('/\[.*?\]/', '', $str);
dla chciwych mecze Spróbuj złapać jak kilka znaków, jak to możliwe. Na tym samym przykładzie: an example [of "sneaky"] text [with more "sneaky"] here
staje się an example text here
.
tylko do pierwszego poniżej]:
preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]
Jest to bardziej wyraźne, ale trudniejsze do odczytania. Używając tego samego przykładowego tekstu, uzyskasz wynik nieagrypcyjnego wyrażenia.
Należy zauważyć, że żadna z nich nie zajmuje się wyraźnie białym odstępem. Przestrzenie po obu stronach [i] pozostaną.
Należy również pamiętać, że wszystkie te mogą się nie udać w przypadku zniekształconego wejścia. Wielokrotne [s i] s bez dopasowań może spowodować zaskakujący wynik.
Bardzo dziękuję za wyjaśnienie! –
Hmm, wadliwe wejście to coś, na co mogę wpaść. Czy można obsłużyć przypadek braku dopasowania]? –
Musiałbym wiedzieć, jak chcesz to zrobić. Co miałbyś nadzieję, że zrobi to ze zniekształconym wejściem? –