Wyrażenia regularne trochę łatwiej…

25 kwietnia 2010

Pewnie wielu z Was, tak jak i ja kiedyś, ma problem z wyrażeniami regularnymi. Przez długi czas znałem tylko ich podstawy nie mogąc przemóc się do dalszej nauki. Każdy przyzna, że ich wygląd potrafi odstraszyć… Oczywiście mimo wszystko polecam kształcenie się w tym kierunku, wyrażenia rozwiązują teraz dla mnie naprawdę skomplikowane czynności. Ale pamiętając swój własny opór przed ich nauką mam dla Was ciekawą alternatywę.

W sieci można znaleźć wiele przykładowych rozwiązań najpopularniejszych problemów. Bez wysiłku znajdziemy wyrażenia do wyciągania adresów email ze stron www, do podlinkowywania adresów www w stringu itd. Problem pojawia się gdy napotykamy na nietypowe zadanie do wykonania. Wtedy musi powstać wyrażenie i albo sam je sobie napiszesz albo ubłagasz kogoś, ewentualnie mu za to zapłacisz :)

Jest jednak światełko w tunelu. Z pomocą może przyjść serwis txt2re.com. Jego obsługa, mimo początkowego wystraszenia się pozornym chaosem, jest łatwa i przyjemna ;)

Tworzenie naszego zapytania jest podzielone na trzy etapy. Pierwszy to wprowadzenie w pierwsze pole typu input tekstu na którym chcemy operować. Następnie klikamy w przycisk Show Matches. Poniżej, jako etap drugi, generuje nam się „ładna” tabelka z rozbitym na części pierwsze tekstem, który przed chwilą wprowadziliśmy.

Proponuję w tej chwili oprzeć się na tym przykładzie. Na samej górze tabelki mamy wypisane wszystkie znaki składające się na nasz przykładowy tekst. Różne kolory komórek oddzielają od siebie odrębne części tekstu. Mamy wybór czy interesuje nas jakaś większa całość czy jeden szczególny element. Powiedzmy, że chcemy utworzyć zapytanie, które będzie pasowało do takiego wzorca: www.JAKAŚ_NAZWA_DOMENY.eu. W tym celu podejmujemy następujące kroki:

  1. Kliknij w pierwszej większej komórce link „www” (ten obok słowa „word”)
  2. Kliknij kropkę (obok litery „C”) w następnej, małej komórce
  3. Kliknij link „var” w największej komórce
  4. Tak jak wcześniej tak i teraz kliknij kropkę w kolejnej komórce
  5. Kliknij „eu” (w tym konkretnym przypadku nie ma właściwie znaczenia które :) )

A teraz opis tego co tak naprawdę zrobiliśmy:

  1. W pierwszej komórce daliśmy do zrozumienia generatorowi, że w naszym wyrażeniu musi się znaleźć konkretny ciąg znaków, w tym przypadku „www”
  2. Następnie ponownie wybraliśmy konkretną wartość, tym razem kropkę
  3. Teraz już nie chcemy aby wyrażenie pasowało tylko do domeny tarnaski ale do każdej innej domeny. Z tego powodu nie kliknęliśmy linku „tarnaski” a link „var”, który mówi: wybierz dowolny ciąg znaków (litery, cyfry i znak podkreślenia) jaki może się znaleźć w tym miejscu. Alternatywą jest link „word” ale on dopuszcza tylko litery a jak wiemy w domenie mogą być także cyfry.
  4. Następne kroki już znamy, nakazujemy generatorowi szukać konkretnych znaków czyli kropki …
  5. … i końcówki „eu”

Prawda, że genialne? :) Naprawdę nie ma tu dużej filozofii, wystarczy przećwiczyć sobie jeden czy dwa przykłady i wszystko staje się proste.

W ostatnim kroku możemy sobie wybrać w jakim języku programowania chcemy dostać kod razem z naszym wyrażeniem (jest też PHP :) ). Wybór języka jest konieczny bo różne języki różnie implementują wyrażenia regularne. Najczęściej są to drobne różnice ale mimo wszystko autor narzędzia nie pokusił się o tworzenie jednych, uniwersalnych wyrażeń dla wszystkich języków. I dobrze.

Jak każde automatyczne narzędzie tak i ten generator wyrażeń regularnych nie jest idealny. Chociażby w naszym prostym przykładzie należałoby ręcznie zmodyfikować wygenerowane wyrażenie ponieważ nazwy domen nie pozwalają na umieszczanie w nich znaków podkreślenia. Ale o ile łatwiej jest zmienić jeden czy dwa znaczki od napisania całego wyrażenia samemu. To narzędzie może też przydać się początkującym do nauki. Nie rozwiążemy nim wszystkich skomplikowanych zadań, nie będą to również najwydajniejsze wyrażenia ale i tak wielu z Was będzie dzięki temu generatorowi spało spokojniej i dłużej…. :)

PS
Po wygenerowaniu wyrażenia radziłbym nie kopiować na ślepo całego kodu bo jego postać, formatowanie itd. pozostawia wiele do życzenia. Najlepiej na podstawie wygenerowanych danych stworzyć własne rozwiązanie.

PS 2
Krótkie „śledztwo” pokazuje, że strona txt2re.com działa od końca 2006 roku ale ja na nią trafiłem zaledwie kilka dni temu. Z pewnością jest wiele osób, które jeszcze jej nie znają dlatego uznałem, że mimo wszystko warto o niej napisać :)

Dodaj komentarz

3 odpowiedzi dla tego wpisu

  1. MariuszT napisał:

    Już tak trochę poza tematem, nie będę modyfikował wpisu, zamieszczę komentarz. Pierwsze słowa autora generatora na stronie FAQ brzmią „I hate regular expressions” :D

  2. Kamil napisał:

    Dobre narzędzie do raczej prostych wyrażeń. Jakoś trudniej byłoby rozkminić wyrażenie pasujące do wieloakapitowego tekstu (usuwanie komentarzy, kolorowanie składni, obsługa bbcode, itp). Nie znałem, ale fajna zabawka :)

  3. Paweł P. napisał:

    Coś z tymi wyrażeniami jest, ale fakt są bardzo ważne!
    Pozdrawiam serdecznie!

Odpowiedz



Podobne wpisy: