Wyrażenia regularne w praktyce PDF Drukuj Email
Wpisał doctor   
Wtorek, 06. Styczeń 2009 21:34

Wyrażenia regularne w praktyce

 

Każdy informatyk wie, jak wyrażenia regularne mogę uprzyjemnić życie. Dla kogoś kto nie wie, wystarczy jako przykład podać makra w arkuszu kalkulacyjnym.

Wyrażenia regularne służą do wyszukiwania wzorców (najczęściej w tekście) według ściśle zdefiniowanych reguł. Reguły te pozwalają objąć swoim zasięgiem ciągi, które układają się w pewien schemat. Inaczej mówiąc, ciągi te można opisać pewnym wyrażeniem, zwanym właśnie wyrażeniem regularnym.

Do czego służą wyrażenia regularne?

Wyrażenia regularne służą głównie do wyszukiwania wystąpień wzorców w zbiorze lub do stwierdzenia, czy dany ciąg pasuje do wzorca. Zbiór znaków (mat. dziedzina) niekoniecznie musi być tekstem, jednak w praktyce tak jest najczęściej.

Rozwińmy powyższe sformułowanie. Wyszukiwanie wzorców w zbiorze polega na takim odfiltrowaniu zbioru, aby spełniał on określone wymagania. Można to przyrównać do filtru o określonej funkcji przejścia (transmitancji), który przepuszcza jedne sygnały, a inne nie. Z kolei stwierdzenie czy dany ciąg  pasuje do wzorca czy nie, stosuje się jako element metod detekcji, a więc działań polegających na stwierdzeniu, czy pewien parametr określonego obieku osiągnął wartość progową lub też czy spełnia określone kryterium klasyfikacji.

Tym oto teoretycznym wstępem przystępujemy do działań praktycznych.

Załóżmy, że na stronie internetowej firmy pojawia się 5 razy adres e-mail tej firmy w postaci Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć. .

Chcąc policzyć ile jest adresów Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć. w źródle strony, należy włączyć wyszukiwanie w procesorze tekstu (najczęściej skrót Ctrl+F) i w pole wyszukiwania wpisać:

 


 

Tym sposobem znajdziemy liczbę wszystkich wystąpień zdefiniowanego wzorca.

Korzystając z wyrażeń regularnych, możemy znaleźć w tekście nazwy wszystkich stron www lub e-maili, numery telefonów, numery kont bankowych itd.

 Co nieco o wyrażeniach regularnych

Wyrażenia regularne dostępne są w 2 składniach: perlowej i uniksowej. Składnia perlowa jest bardziej rozbudowana oraz częściej stosowana. M.in. mod_rewrite serwera Apache korzysta ze składni Perla. Każdy język programowania posiada obsługę wyrażeń regularnych, jeśli nie w bibliotece standardowej, to w bibliotekach dodatkowych. W C++ Builder do obsługi wyrażeń regularnych służy biblioteka Boost Regex.

 Warsztat pracy

 Naszym celem będzie filtrowanie ciągów za pomocą wyrażeń regularnych, korzystając z gotowego programu. Do tego celu wykorzystamy rozbudowany edytor EditPlus.

Wykonać rozkaz!

Dostaliśmy zadanie stworzenia kategorii produktów skopiowanej z bazy danych. Baza liczy setki pozycji, nie ma więc sensu ręcznego formatowania każdej linii.

 


 

Na powyższym rysunku widać znaki, które niepowinny znaleźć się w opracowanych kategoriach produktów. Są to symbol *, a ponadto liczba w nawiasach okrągłych, obrazująca liczebę produktów w danej kategorii. Dodatkowo, umieścimy kategorie tak, aby zaczynały się od 1 znaku w linii.

Zaczniemy od usunięcia znaków *. To najłatwiejsze zadanie, bo polegać będzie na zamianie każdego znaku * na nic, albo na spację. Nie korzystamy tu z wyrażeń regularnych. Z menu Search wybieramy Find (lub Alt+F3).

 

 
Gdy wpiszemy już pola Find what oraz Replace with, pozostaje nam wcisnąć przycisk Replace all.
Na pasku statusu EditPlus otrzymamy informację, ile wystąpień tekstu zostało zamienionych.
W następnym kroku usuniemy liczby w nawiasach wraz z nawiasami je otaczającymi. Skorzystamy tu z wyrażeń regularnych.
Z menu Search wybieramy Replace (lub Ctrl+H) i ustawiamy wzorzec tekstu na
\(([0-9]+)\)
oraz zamianę ciągu na pusty znak.
Koniecznie zaznaczamy pole Regular expressions.
 

 

W następnym kroku sprawimy, aby po numeracji głównej kategorii (np. 7.7) następowały 3 spacje a po nich nazwa kategorii.

Wybieramy Search->Replace i wpisujemy następujący wzorzec ([0-9]+).([0-9]+)([ ]+)([a-zA-Z]+)

oraz zamieniamy go na \1.\2   \4. Należy zauważyć, że między 2 a \4 są dokładnie 3 spacje.

 

 
Wciskamy przycisk Replace All.
 
Ostatnim krokiem przesuniemy nazwy podkategorii do początku linii. Szukamy wzorców
(\n)([ ]+)([a-zA-Z]+) i zamieniamy je na 
\1\3
Ostatecznie, wynik naszej pracy wygląda tak:
 
Wszystko równiutko poprzesuwane, w tekście można dostrzec optyczny porządek Laughing
Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Czwartek, 31. Grudzień 2009 16:58
 
 

Losowy obraz

compilercolor.jpg

Gościmy

Naszą witrynę przegląda teraz 10 gości 




| | | |