Wyrażenia regularne
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaRegexpy - wyrażenia regularne
Cytuję WIKIpedię (tekst dostosowałem tak, aby dotyczył tylko perla):Podstawowe zasady
- Każdy znak oprócz znaków specjalnych określa sam siebie, np. "a" określa łańcuch złożony ze znaku "a"
- Kolejne symbole oznaczają, że w łańcuchu muszą wystąpić dokładnie te symbole w dokładnie takiej samej kolejności, np. "ab" oznacza że łańcuch musi składać się z litery "a" poprzedzającej literę "b"
- Kropka '.' oznacza dowolny znak z wyjątkiem znaku nowego wiersza (zależnie od ustawień i rodzaju wyrażeń)
- Znaki specjalne poprzedzone odwrotnym ukośnikiem (\) powodują, że poprzedzanym znakom nie są nadawane żadne dodatkowe znaczenia - oznaczają same siebie, np. '\.' oznacza znak kropki (nie dowolny znak). Znak '\n' oznacza nową linię, '\r' - powrót karetki, '\s' - dowolny biały znak (spację, FF, tab i zależnie od ustawień \r i \n)
- Zestaw znaków między nawiasami kwadratowymi oznacza dowolny znak objęty nawiasami kwadratowymi, np "[abc]" oznacza a, b lub c. Można używać także przedziałów: "[a-c]". Między nawiasami kwadratowymi:
- Daszek (^) na początku zestawu oznacza wszystkie znaki oprócz tych z zestawu podanego w nawiasie.
- Aby uniknąć niejasności znaki "-" (myślnik) i "]" (zamknięcie nawiasu kwadratowego) zapisywane są na skraju zestawu ('-') lub w odwrotnego ukośnika ('\]'), daszek zaś wszędzie z wyjątkiem początku łańcucha..
- Większość znaków specjalnych w tym miejscu traci swoje znaczenie, czyli znaczą to, co znaczą; np. *, +, kropka itp.
- Nawiasy okrągłe ( i ) grupują symbole.
- Gwiazdka '*' po symbolu, nawiasie lub pojedynczym znaku nazywana jest dopełnieniem Kleene'a i oznacza zero lub więcej wystąpień poprzedzającego wyrażenia
- Znak zapytania po symbolu oznacza najwyżej jedno (być może zero) wystąpienie poprzedzającego wyrażenia, chyba, że stoi po gwiazdce lub po znaku '+'. W takim przypadku wyłącza zachłanność * lub +.
- Plus '+' po symbolu oznacza co najmniej jedno wystąpienie poprzedzającego go wyrażenia (lub więcej, dopasowywane będzie zachłannie tak dużo, jak to będzie możliwe)
- Daszek (^) oznacza początek wiersza, dolar ($) oznacza koniec wiersza. Jeżeli dodano do wyrażenia modyfikatory, mogą one dopasowywać się także przed lub po nowej linii w tekście wielowierszowym.
- Pionowa kreska (ang. pipeline) (|) to operator OR np. jeśli napiszemy "a|b|c" oznacza to, że w danym wyrażeniu może wystąpić "a" lub "b" lub "c". Należy zwracać uwagę na to, że w kolejnych alternatywach maszyna wyrażeń regularnych powinna mieć w miarę kompletne wzorce, włącznie z zakotwiczeniami początka/końca łańcucha. Zatem /^a|b|c$/ działa inaczej niż /^a$|^b$|^c$/, i prawdopodobnie ten drugi wzorzec jest tym, o który ci chodzi :)
Rozszerzenia Perla
Rozszerzenia Perla to między innymi:- Negacja zestawu (wszystko co nie należy do zestawu).
- cyfry są zastępowane znakami \d (dowolna cyfra) i \D (wszystko co nie jest cyfrą)
- znaki alfanumeryczne, czyli [A-Za-z0-9_] przedstawiane są jako \w, a wszystkie poza nimi jako \W
- granice słów - \b i ich zaprzeczenie \B (obszar wewnątrz znaków \w - te sekwencje dopasowują się do pozycji w napisie o zerowej szerokości, podobnie jak ^ lub $ które mają zerową długość i oznaczają tylko miejsce)
- znaki "białe" \s i \S (przeciwieństwo)
- rozszerzony zapis przedziałów, wprowadzenie klas znaków np.:
- [:digit:] oznacza dowolną cyfrę (jeżeli nasz perl obsługuje wzorce POSIXowe)
- [:alpha:] literę
- [:alnum:] literę lub cyfrę
- możliwość precyzyjnego określenia liczby wystąpień danego wyrażenia
- wyrażenie{N} oznacza dokładnie N wystąpień
- wyrażenie{N,} co najmniej N wystąpień wyrażenia
- wyrażenie{,M} co najwyżej M wystąpień wyrażenia
- wyrażenie{N,M} od N do M wystąpień wyrażenia
- możliwość określenia zachłanności lub jej wyłączenia przez dodanie '?'
Dodatkowe informacje
Strona, na której jest kilka wyjaśnień dotyczących wzorców (z kontekstu i przykładów wynika, że chodzi o PHP, ale niektóre z zasad są podobne, a jeżeli używasz w PHP funkcji takich jak preg_match lub preg_replace, to chodzi WPROST o engine wyrażeń regularnych podwędzonych z perla...:)
- http://www.programuj.com/artykuly/www/regularne.php
- Kurs perla oraz wyrażenia regularne: http://www.republika.pl/wieluk/strony/wzorce.html