CompZone.Org :: Artykuły :: PHP
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

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

 <?php
$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);
 <?php
$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)

jedre @ 11-07-2006 20:35
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!