Jesteś tutaj: Główna → Wyrażenia regularne → Powtórzenia
Znaki powtórzeń fachowo nazywają się kwantyfikatorami wyrażeń regularnych, co wcale nie oznacza, że tej ostatniej nazwy należy się trzymać. Ten rozdział miał pierwotnie być zatytułowany Kwantyfikatory, ale już podczas pisania przyszło mi na myśl, że ta nazwa bardziej odstraszy niż zachęci czytelników.
Znaki powtórzeń umożliwiają nam dopasowywanie dopasowywanie wielokrotnych wystąpień danego elementu wzorca. By dopasować liczbę czterocyfrową napiszemy \d\d\d\d, ale o wiele wygodniej - i bardziej elegancko - jest skrócić to wyrażenie do \d{4}, co tłumaczy się jako dopasuj cyfrę dokładnie cztery razy.
Znaki powtórzeń swym zasięgiem obejmują poprzedzający je znak lub ostatnią grupę znaków (grupa znaków to, hm, grupa znaków, która przez mechanizm wyrażeń regularnych traktowana jest jako całość i oznacza się ją za pomocą nawiasów (grupa znaków); więcej o tym zagadnieniu możesz przeczytać rozdziale poświęconym grupom znaków).
Generalnie są trzy podstawowe znaki powtórzeń: asterisk *, plus + i znak zapytania ?. Dopasowują one, odpowiednio: 0 albo więcej razy, 1 albo więcej razy oraz 0 albo 1 razy.
Teraz są dość ważne rzeczy, więc tym razym przykłady stanowią osobną część rodziału.
Wyrażenie .* dopasowuje dowolny ciąg znaków. Kropka, jak wiesz, odpowiada dowolnemu znakowi. Gwiazdka, jako znak powtórzenia, „łączy” się z poprzedzającym ją znakiem; innymi słowy wyrażenie to oznacza: „dopasuj dowolne znaki dowolną liczbę razy”. [D]owolną liczbę razy
oznacza w tym przypadku tak zero, jak i wiele razy. W szczególności do tego wzorca pasują linie puste, jak i te, które zawierają dowolne znaki.
Wyrażenie [\w._]+ wyłapuje słowa (jedno- lub więcej -literowe) , składające się cyfr, liter, minusa -, podkreślenia i kropki. Uważny czytelnik zwróci uwagę na jeden istotny detal - w klasie znakowej [...] kropka traci swoje specjalne znaczenie i nie trzeba jej uciekać.
Za pomocą ość? dopasujemy słowa oś oraz ość (jak również kość, koś, skośny i tak dalej). Znak zapytania ? możemy interpretować jako oznaczenie, że dany poprzedzający go znak (grupa znaków) jest opcjonalna, to jest może występować, ale niebo nie spadnie nikomu na głowę, jeśli w dopasowywanym wzorcu się nie pojawi.
Grupa znaków wzięta w nawiasy traktowana jest jako całość i to do niej właśnie odwołuje się następujący po niej znak powtórzenia; wyrażenie J-(\d)+ dopasuje nam Hansa Klossa ciąg znaków J-23 (oraz dodatkowo innych agentów-szpiegów J-256, J-3141592 itd.) Znak plusa w tym przypadku odnosi się jedynie do cyfry, która w tym wyrażeniu może występować dowolną liczbę razy (ale przynajmniej raz i do tego po ciągu znaków J-). Grupowanie znaków ma dużo więcej zastosowań, ale o tym później.
O powtórzeniach z góry zadaną liczbę razy już wspomniałem - to te oznaczane klamrami {liczba powtórzeń}. Można używać także klamerek o nieco bardziej ogólnym charakterze:
{zakres dolny,}Dopasowuje poprzedzający znak lub grupę znaków zakres dolny lub więcej razy.
{zakres dolny,zakres górny}Dopasowuje poprzedzający znak lub grupę znaków co najmniej zakres dolny, ale nie więcej niż zakres górny razy.
Jeśli teraz, drogi czytelniku, czujesz się mądry i pragniesz sprawdzić swoje siły - napisz, proszę, wyrażenie, które dopasowywać będzie znaczniki HTML. Podpowiem, że jeśli sądzisz, że jest to <.+>, to jesteś w błędzie.
Dlaczego? Dlatego, że mechanizm dopasowywania wzorców jest zachłanny!