Kurs Perl – cz. 4

Kurs Perla nadal powstaje i to już jego czwarta odsłona. Jeśli jeszcze nie czytałeś poprzednich to możesz je znaleźć pod tymi linkami: część 1, część 2, część 3.

Tak jak poprzednio zakładam, że jeśli chodzi o programowanie to coś umiesz, dodatkowo wiedza z poprzednich części tego kursu też może się przydać, ponieważ jak zwykle piszę zwięźle, technicznie i bez powtarzania treści ;)

1. Wstęp

W końcu zaczynamy poważne rzeczy. W tej części zajmiemy się wyrażeniami regularnymi czyli potężnym narzędziem służącym do pracy z tekstem. Jest to pierwsza część poświęcona wyrażeniom regularnym ponieważ ten temat jest już dosyć obszerny i warto się przy nim zatrzymać na dłużej ;)

Wyrażenia regularne pozwalają wyszukiwać w tekście wybranych wzorców, wyciągać dane, podmieniać fragmenty na inne wg podanej reguły itp.

2. Wstawianie wyrażeń regularnych

Wyrażenie regularne oznacza się znakami //. Pomiędzy nimi wpisujemy regułę:

Jeśli chcesz sprawdzić czy w tekście znajduje się podany wzorzec korzystasz z operatora =~:

Wyrażenie zwróci wartość 1 (true) jeśli tekst znajdujący się w zmiennej tekst pasuje do wzorca lub 0 (false) w przeciwnym przypadku.

Jeśli chcesz zmienić znaki ograniczające wyrażenie regularne możesz przed nim dodać literę m:

Jeśli zmienisz znak ograniczający na inny możesz bez problemu użyć slasha ( ) w wyrażeniu.

Perl pozwala użyć ponownie ostatnio użytego wyrażenia regularnego. W tym celu wystarczy pomiędzy znakami ograniczającymi nic nie wpisać. Np. w tym wypadku w drugiej linii zastosowane będzie wyrażenie użyte także w pierwszej:

 3. Dodatkowe opcje

Korzystając z wyrażeń regularnych możemy włączyć dodatkowe opcje sterujące ich zachowaniem. Podaje się je po ostatnim znaku ograniczającym:

Opcje jakie mamy dostępne w Perlu to:

  • i – ignorowanie wielkości znaków
  • g – wyszukiwanie wszystkich wystąpień wzorca, a nie tylko pierwszego
  • x – powoduje, że białe znaki w wyrażeniu regularnym są pomijane dopóki nie poprzedzimy ich backslashem dzięki temu można pisać reguły w czytelniejszy sposób
  • m – powoduje, że metaznaki ^ i $ (początek i koniec ciągu znaków, o nich powiem za chwilę) odnosić się będą do każdej nowej linii nie do całego tekstu. Przydatne np. kiedy przeszukujesz wielowierszowy tekst
  • s – oznacza, że przetwarzany tekst jest traktowany jako jedna linia przez co metaznak . (dowolny znak) odnosi się także do znaku nowej linii, bez tej opcji znak nowej linii nie jest brany pod uwagę

Opcje możemy łączyć, czyli jeśli przykładowo chcemy aby w podanym wyrażeniu były ignorowane białe znaki i wielkość liter wystarczy, że napiszemy:

 4. Metaznaki

Metaznaki są chyba najistotniejszą rzeczą w wyrażeniach regularnych. Mają one pewne, inne niż w normalnym tekście, znaczenie:

  • . – kropka, oznacza dowolny, pojedynczy znak. Przykładowo do  A.a  będzie pasować zarówno słowo Ala jak i Aga
  • [] – nawiasy kwadratowe służą do określenia jednego znaku, który będzie pasował do zbioru znaków podanego w tych nawiasach. Przykładowo dla  a[bc]e  pasować będzie abe lub ace, ale już nie age. Dodatkowo jeśli zaraz za nawiasem otwierającym umieścimy znak ^ będzie to określało znak, który nie należy do zbioru podanego w nawiasach, np. dodając znak ^ do wcześniejszego przykładu  a[^bc]e  sprawimy, że pasować będzie słowo age, ale abe lub ace już nie. W nawiasach kwadratowych można też podawać zakres. Jeśli np. chcesz aby szukany znak był z zakresu od a do e wystarczy użyć między tymi literami znaku myślnika:  a[a-e]e , podobnie sprawa wygląda z cyframi
  •  ^ – oznacza (poza wyjątkiem opisanym dla nawiasów kwadratowych) początek tekstu, czyli inaczej mówiąc znak znajdujący się zaraz za ^ musi być pierwszym znakiem w tekście aby dopasowanie było spełnione
  • $ – oznacza koniec tekstu, a więc znak postawiony przed $ musi być ostatnim w tekście aby dopasowanie zadziałało
  • () – służą do określenia grupy/podgrupy.  Tekst w nawiasach będzie zwrócony jako kolejny element listy. Dzięki grupowaniu można wyciągnąć z tekstu do listy kilka danych. Przykładowo wyrażenie  $tekst =~ /([0-9]):([0-9])/;  dla $tekst równego 8:3 zwróci listę (‚8’, ‚3’). Możemy się też dostać do poszczególnych grup przez specjalne zmienne $x gdzie są kolejnymi liczbami, w podanym przykładzie w zmiennej $pierwsza_liczba znajdzie się wartość ’11’:

    Dodatkowo w nawiasach okrągłych można stosować znak alternatywy ( | ). Np. w wypadku tego wyrażenia  /text (aaa|bbb) text/  pasować będzie zdanie ‚text aaa text’ jak również ‚text bbb text’.
  • \ – backslash powoduje, że metaznak stojący za nim przestaje „działać” i jest traktowany jako zwykły znak
  • * – oznacza, że znak stojący przed nią może wystąpić zero lub więcej razy. Przykład:  /ba*/  będzie spełnione dla ciągów ‚ba’, ‚baaaaaaa’, ‚b’
  • + – plus działa podobnie jak * z tym, że znak musi wystąpić co najmniej jeden raz
  • ? – znak zapytania oznacza, że znak stojący przed znakiem zapytania występuje 0 lub 1 raz
  • {} – nawiasy klamrowe pozwalają dodać nasze własne ograniczenie co do ilości wystąpień danego znaku. Wpisujemy pomiędzy nie minimalną i maksymalną ilość powtórzeń. Jeśli nie podamy, którejś liczby przedział zostanie otwarty. A więc jeśli przykładowo wpiszemy  a{3,10}  oznaczać to będzie, że litera ‚a’ musi wystąpić co najmniej 3 i nie więcej niż 10 razy. Jeśli wpiszemy  a{,5}  to litera ‚a’ będzie mogła wystąpić od 0 do 5 razy, analogicznie zostawienie pustego ograniczenia z drugiej strony spowoduje, że znak będzie mógł się powtórzyć nieskończenie wiele razy. Można też podać tylko jedną liczbę bez dodawania przecinka, wtedy ograniczymy wystąpienie danego znaku do dokładnie określonej ilości.

5. Klasy

W wyrażeniach regularnych możemy użyć predefiniowanych klas, które skracają zapis pewnych grup znaków.

  • \d – oznacza wszystkie cyfry (od 0 do 9), odpowiada zapisowi  [0-9]
  • \D – przeciwieństwo poprzedniego czyli wszystkie znaki poza cyframi
  • \w – litery, cyfry lub znak podkreślenia
  • \W – dowolny znak nie będący literą, cyfrą lub znakiem podkreślenia
  • \s – białe znaki (spacja, tabulator itd.)
  • \S – wszystkie znaki nie będące białymi

6. Podsumowanie

Za nami już czwarta część kursu Perla :) Dzisiaj pokazałem podstawowe zagadnienia związane z wyrażeniami regularnymi. W następnej części poszerzymy nieco wiedzę w tym zakresie dlatego nie przegapcie piątej części tego kursu, która już niebawem.

I jak zwykle zachęcam do komentowania i lajkowania na Facebooku ;)

1 thought on “Kurs Perl – cz. 4”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *