Wyrażenia regularne standardu POSIX
Nie będę tutaj pisał czym są wyrażenia regularne, opisze natomiast: - Wyrażenia regularne standardu POSIX. Na początku chciałbym przedstawić 12 klas znaków wchodzących w standard wyrażeń regularnych POSIX.
Klasy znaków zapisuje się pomiędzy znakami dwukropka, a dodatkowo należy je umieścić w nawiasach kwadratowych.
- alpha - reprezentuje literę alfabetu (duże małe), odpowiada wyrażeniu [A-Za-z]
- digit - reprezentuje dowolną cyfrę, odpowiada wyrażeniu [0-9]
- alnum - reprezentuje dowolny znak alfanumeryczny, odpowiada wyrażeniu [A-Za-z0-9]
- blank - reprezentuje 'białe' znaki np. tabulator, spacja
- cntrl - reprezentuje znaki 'sterujące' np. DELETE, INSERT itp.
- graph - reprezentuje wszystkie znaki mające swoją reprezentacje graficzną, z wyjątkiem odstępu
- lower - reprezentuje jedynie małe litery alfabetu
- upper - reprezentuje jedynie duże litery alfabetu
- print - reprezentuje wszystkie znaki mające reprezentacje graficzną
- punct - reprezentuje znaki przestankowe np, , (przecinek)
- space - reprezentuje odstępy
- xdigit - reprezentuje cyfry szesnastkowe
Wykorzystując powyższe klasy znaków możemy stworzyć wyrażenie sprawdzające poprawność adresu e-mail:
[[:alnum:]_]+@[[:alnum]_]+\.[[:alnum:]_]{2,}
adresy e-mail które będą pasować do powyższego wyrażenia:
- nazwa@serwer.domena
- n@s.do
Tak więc wyrażenie to można odczytać tak:
[[:alnum:]_] - Przynajmniej jeden znak alfanumeryczny
+@ - Następnie znak małpy "@"
[[:alnum:]_] - Przynajmniej jeden znak alfanumeryczny
+\. - Następnie znak kropki "."
[[:alnum:]_]{2,} - Przynajmniej dwa znaki alfanumeryczne
Cyfry w nawiasach klamrowych oznaczają ilość powtórzeń danej klasy, gdy ich brak klasa może powtarzać się nieskończenie wiele razy, poniżej znajdują się możliwe opcje zapisu:
[[:alnum:]_]{3} - dokładnie 3 znaki alfanumeryczne,
do wyrażenia pasują: ax_ | _a_ | aaa | x98 | 8o9
do wyrażenia nie pasują: a | ax | _a | aa_a | u876 | u4 | yyy7765
[[:alnum:]_]{3,} - przynajmniej 3 znaki alfanumeryczne,
do wyrażenia pasują: qwe_a | ooo | y89 | y5uyrz | p21zz
do wyrażenia nie pasują: a | ax | _a | a_ | u4
[[:alnum:]_]{3,5} - od 3 do 5 znaków alfanumerycznych,
do wyrażenia pasują: qwe_a | ooo | y89 | y5uy | p21zz
do wyrażenia nie pasują: a | axaaaqw | _a | a_ | u4az890
Odwołania
Przy pomocy nawiasów możemy grupować wyrażenia regularne. Każde dopasowanie będzie miało swój własny identyfikator liczbowy. Identyfikatorów można tych następnie używać w różnych operacjach, takich jak wyszukiwanie i zastępowanie.
Zobaczmy:
adres@email.com
([[:alpha:]])+@([[:alpha:]])+\.([[:alpha:]]{2,4})
To wyrażenie regularne powinno pasować do podanego powyżej adresu poczty elektronicznej. Należy zauważyć, że nazwę użytkownika, domenę jak i rozszerzenie domeny zdefiniowano jako grupy umieszczając je pomiędzy znakami nawiasu, dlatego też każdy z nich stanie się odwołaniem:
0 - adres@emial.com 1 - adres 2 - emial 3 - com
Stosowanie wyrażeń regularnych w PHP
W PHP możliwość stosowania wyrażeń standardu POSIX umożliwiają funkcje zaczynające się od znaków "ereg".
Podstawowe sprawdzanie czy wyrażenie regularne pasuje do podanego łańcucha, realizuje funkcja ereg.
Prototyp funkcji ereg:
ereg(wzorzec, lancuch[,dopasowania])
Funkcja zwraca wartość true jeśli wyrażenie można dopasować do łańcucha, w przeciwnym razie zwracana jest wartość false. Jeśli zostanie zdefiniowany trzeci parametr odwolania to zostanie w nim zapisana tablica zawierająca wszelkie odwołania zdefiniowane w wyrażeniu.
Zobaczmy
![]()
$mail = 'adres@emial.com';
![]()
if(ereg( '([[:alpha:]])+@([[:alpha:]])+\.([[:alpha:]]{2,4})', $mail) ){
echo 'Adres e-mial jest poprawny. Dopasowanie zakończone sukcesem!';
}
else{
echo 'Nie udało się dopasować wyrażenia regularnego!';
}
![]()
Istnieje również funkcja eregi, która nie zwraca uwagi na wielkość liter.
Odwołania i funkcja ereg_replace
Funkcja ereg_replace pozwala na wykonywanie operacji wyszukiwania i zastępowania, jej odpowiednikiem jest funkcja eregi_replace, która nie uwzględnia wielkości liter.
Protoyp funkcji ereg_replace:
ereg_replace(wzorzec, zamiennik, lancuch);
![]()
$mail = 'adres@email.com';
![]()
echo ereg_replace (([[:alpha:]])+@([[:alpha:]])+\.([[:alpha:]]{2,4})), '\1 malpka \2 kropka \3', $mail);
![]()
Powyższy skrypt wyświetli następujący tekst:
adres malpka email kropka com
Jak widać pobierane są trzy odwołania, a następnie umieszczane w łańcuchu przekazanym jako zamiennik w miejscach określonych odpowiednio przez \1, \2, \3.
To by było na tyle jeśli chodzi o wyrażenia regularne standardu POSIX. Jeśli masz jakieś pytania pisz śmiało.
Źródła: http://php.net/manual/, PHP5 Księga Eksperta (Helion)










