Wyrażenia regularne – bardzo krótki przewodnik

17-Wrz-2014

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 ?

 

Dodaj komentarz:

Autor: Rafał Kraik