Moduł Regex::presuf
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Wstęp
Regex::Presuf to modul, ktory tworzy wyrażenia regularne z podanej listy słów. Modul bardzo dobry do podstawowej nauki wyrazen regularnych z Perla. Innym pomysłem na wykorzystanie takiego modułu jest np. przeszukiwanie jakiegoś tekstu w celu znalezienia słów wprowadzanych przez użytkownika. Można to zrobić tworząc dynamicznie wyrażenia regularne z listy słów pobranych od użytkownika Moduł ten pozwoli nam w łatwy sposób budować efektywne wyrażenia regularne, których zastosowanie będzie szybsze niż zwykłe przyrównywanie do każdego słowa po kolei.<\br> Poniżej przykładowy sposób użycia: $re=presuf('Damian','Damien','Damianek'); $re zawiera wyrażenie regularne: Dami(?:an(?:ek)?|en)Opis
Zastosowanie takiego wyrażenie jest szybsze niż przyrównywanie do 3 słów z listy.
Moduł ten działa tylko w prostych przypadkach - tzn znaki wyrażen regularnych np.: *.?[]^$+>< sa traktowane dosłownie - 'slow.' oznacza dokładnie 'slow.' zakonczone kropka, a nie dowolnym znakiem.
Jest jednak możliwość traktowania kropki /TYLKO kropki/ tak jak w wyrażeniach regularnych - jako dowlonego znaku jednak wtedy jako pierwszy argument wywołania funkcji należy podać hash'a {anycharacter=>1}
Mamy przygotować wyrażenie regularne, dopasowujące się do słowa "damian" we wszystkich przypadkach oraz dopuszczajac mozliwosc wystapienia w miejscu pierwszego 'a' dowolnego znaku.
Możnaby to zrobić wypisujac wszystkie możliwosci w naszej liscie:
$re=presuf('damian','dbmian','dcmian'....'damiana','dcmiana' ... jednak nie jest to optymalne rozwiazanie - jest to rozwiazanie porownywalne do wypisania calej listy słów - a wyrażenia regularne sa po to by krótkim ciągiem znaków zastąpić długą listę słów o pewnych podobnych cechach. Moduł Regex::PreSuf udostępnia możliwość traktowania kropki tak jak w wyrażeniach regularnych - zastepującej dowolny jeden znak. W celu skorzystania z tej opcji należy wywołać funkcję w ten sposób: $re=presuf({anycharacter=>1},'d.mian','d.miana','d.mianem','d.mianowi'); $re zawiera wyrażenie regularne: d.mian(?:em|owi|a)?
Omawiany moduł zawiera możliwość debbugowania wywołania metody presuf. Tryb debuggowania przeprowadza wyszukiwanie wzorca wypisujac na ekranie kolejne kroki dzialania tego modułu. Aby właczyc ten tryb nalezy wywolac metodę Regex::PreSuf::debug(1) Uruchamiając w tym trybie otrzymamy:
Domyślnie moduł ten buduje wyrażenia regularne znajdując takie same prefiksy a potem dopasowując pozostałe człony wyrazów. Takie ustawienie jest domyślnym ponieważ dla większości języków zazwyczaj szybciej się znajduje odpowiednie wyrażenie regularne. Jednak gdyby zaistniała taka potrzeba - jakiś specyficzny język, specyficzne dane - możemy budować wyrażenia regularne od "końca". przykład: $re=presuf({suffixes=>1},qw\d.mian d.miana d.mianem\) w przypadku checi wykorzystania specyficznych właściwości kropki: $re=presuf({suffixes=>1,anychar=>1},qw\aslow zxcow vbn.cow\)
Dodatkowe informacje
Dokumentacja na CPAN
Autor modułu i kontakt do niego
Autor: Damian Karpiń
Email: plactostomus@wp.pl