Wyrażenia regularne i parsowanie

2007-10-31 17:36

Myślę, że większość programistów miała przynajmniej przelotny kontakt z wyrażeniami regularnymi. Zwykle używa się do bardziej zaawansowanego wyszukiwania podciągów w tekście – nie określonych sekwencji liter, ale fragmentów określonych raczej pewnymi warunkami. Innym ich zastosowaniem jest też sprawdzanie, czy podany łańcuch pasuje do pewnego określonego formatu. Przy pomocy poniższego wyrażenia:

  1. ^[a-zA-Z0-9]+[a-zA-Z0-9\.]*[a-zA-Z0-9]*@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$

można na przykład sprawdzić poprawność adresu e-mail (czy zawiera on znaczek @, czy nazwa domeny jest przynajmniej formalnie poprawna, itd.). Nietrudno zauważyć jednak, że sama postać wyrażenia jest dość odstręczająca, a poza tym sporo elementów się w nim powtarza – choćby sekwencja dopasowująca pojedynczy znak alfanumeryczny. Poza tym dokładna składnia wyrażeń w danej bibliotece może być niekiedy specyficzna, chociaż podstawy (czyli np. elementy pokazane powyżej) powinny być w zasadzie wszędzie takie same.

Mimo to czasem warto użyć tego narzędzia również w bardziej zaawansowanym celu: parsowania ciągów znaków w celu wydzielenia i odczytania z nich określonych fragmentów. Zapewne nie da się w ten sposób przetworzyć na przykład dokumentu XML czy innego skomplikowanego formatu, lecz w prostszych przypadkach może się to okazać szybsze i wygodniejsze. Alternatywą jest oczywiście samodzielne napisanie parsera, tokenizera czy innego tego typu obleśnego automatu stanów :)

Tags: ,
Author: Xion, posted under Programming »


3 comments for post “Wyrażenia regularne i parsowanie”.
  1. SirMike:
    October 31st, 2007 o 20:05

    Regexy rulez :) Nie wyobrazam sobie pisania walidatora bez uzycia wyrazen regularnych. To co mozna klepnac w jednej linijce regexa, czesto przeklada sie na kilkanascie linii kodu. Szkoda czasu i energii ;)

  2. spaxio:
    November 1st, 2007 o 10:01

    Do sprawdzania adresow URL wyglada lepiej :D

  3. Xion:
    November 1st, 2007 o 17:38

    Nie chciałem straszyć takim dziwolągiem, który pewnie nie zmieściłby się w jednej linii nawet na najszerszych monitorach :)

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.