Kiedy musisz przeszukiwać teksty, dopasowywać je do maski, szybko okaże się, że metaznaki * i ? znane chociażby jako symbole jednoznaczne rozumiane przez system operacyjny podczas operacji na plikach nie są wystarczające. I wtedy z pomocą przychodzą wyrażenia regularne, a wraz z nimi dziesiątki i setki zupełnie nowych problemów….
Najprostsze wyrażenie regularne to – dokładnie ten sam napis, który chcesz dopasować np.
Tekst Janosik pasuje do wyrażenia regularnego Janosik
Budując wyrażenia regularne możesz korzystać z symboli specjalnych. Należą do nich
\^$.*+|?()[]{}
Dokładniej ich znaczenie opisujemy poniżej:
\ backslash
Pozbawia symbolicznego znaczenia kolejnego znaku. Aby stworzyć wyrażenie do którego pasuje tekst 1+2 chciałoby się skorzystać z wyrażenia regularnego 1+2 ale przecież + ma inne znaczenie (przedstawimy je dalej). Dlatego należy pozbawić + tego specjalnego znaczenia. Poprawne wyrażenie regularne to więc 1\+2
[] – nawiasy kwadratowe
Wyrażenie określa, że spośród liter umieszczonych w nawiasie kwadratowym napis musi pasować do przynajmniej jednej z nich. Np. wyrażenie regularne [LW]ody pozwala na dopasowanie tekstów Lody lub Wody. Do tego wyrażenia nie pasuje jednak słowo Rody.
W nawiasach kwadratowych można stosować też zakresy np. [0-9] jest równoważne [0123456789]. Dzięki temu polski kod pocztowy można zdefiniować wyrażeniem regularnym [0-9][0-9]-[0-9] [0-9] [0-9]
Znak ^ umieszczony w nawiasie kwadratowym „zaprzecza” danemu wykazowi znaków, np. [^0-9] oznacza, że w danym miejscu nie może występować cyfra np. wyrażenie [0-9][0-9][^0-9] określa, że na dwóch pierwszych znakach ma występować cyfra ale na trzecim znaku nie może być cyfry.
Skróty
\d – oznacza cyfrę
\w – oznacza literę
\s – oznacza biały znak (enter, spacja, tablulator)
\t – oznacza tabulator
\r – powrót karetki
\n – nowa linia
. kropka
Oznacza cokolwiek – jakikolwiek znak. Np. ….. pasuje do każdego pięcioliterowego słowa lub 5 cyfrowej liczby lub mixu obojga, łącznie z innymi znakami. Jedynie \n nie pasuje do .
Np. W..a pasuje d Woda Wara Weka itp.
^ początek
Pozna znaczeniem znaku ^ przedstawionym wcześniej (^ w nawiasach kwadratowych), ma on jeszcze inne znaczenie. Pasuje do początku definiowanego napisu ^A… oznacza każdy tekst który zaczyna się od A i ma 3 dowolne znaki.
$ koniec
Oznacza koniec tekstu, np. …D$ oznacza, że wyrażenie ma się zakończyć literą D
| lub
| pozwala zdefiniować kilka pasujących masek np. wybierając numer telefonu i poprzedzając go kodem kraju możesz wpisać na klawiaturze +48 123456789 albo 0048 123456789. Aby zdefiniować takie wyrażenie regularne można by napisać (dalej znajdziesz krótsze rozwiązanie):
\+48 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]|0048 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]
? – opcja
Jeżeli w wyrażeniu używasz ? to oznacza on, że poprzednie wyrażenie może, ale nie musi występować np.
Wia?no pasuje do słowa Wiano ale po dopuszczalnym opuszczeniu a pasuje też do Wino
* {} + Powtórzenie
Gwiazdka oznacza, że część wyrażenia znajdująca się przed nią ma wystąpić zero lub większą ilość razy np.
Fiat [0-9]* pasuje do Fiat 125 Fiat 126 lub do Fiat 1234567890 lub do Fiat
Jeżeli powtórzenie ma wystąpić tylko określoną liczbę razy użyj liczby w nawiasie klamrowym np. numer telefonu do Polski można znacznie skrócić:
\+48 [0-9]{9}
A jeśli dopuścić też notację z dwoma zerami to:
\+48 [0-9]{9}|0048 [0-9]{9}
Znak plus oznacza również powtórzenie. Od gwiazdki różni się tym, że powtórzenie musi wystąpić co najmniej jeden raz:
Co+l pasuje do Col, Cool, Coool, ale nie pasuje do Cl.
() grupowanie
Do tej pory symbole oznaczały pojedyncze wystąpienie litery. Nawiasy pozwalają pracować z mniejszą dokładnością, np.
(anty)?.+ pasuje do antyczny, antykwariat, antyalkoholowy, ale pasuje też do alkoholowy, bo cała cząstka anty jest opcjonalna bo występuje po niej ?