Wyrażenia regularne
Regularne wyrażenia dostarczają możliwości zaawansowanych porównań oraz manipulacji
na ciągach znaków STRING'ach.
Można je spotkać w wielu innych językach, takich jak np. Perl, JavaScript
itp.
Regularnych wyrażeń możemy użyć w takich funkcjach jak
ereg(), eregi(), ereg_replace(), eregi_replace(), split(), spliti().
Podstawy oraz znaki specjalne
Znak ^ wskazuje że słowo(string) powinno zaczynać się od słowa "programowanie",
przykładowo:
"Lubię programowanie" zwróci nam wartość false ponieważ zaczyna się
słowem "Lubię" natomiast,
"Programowanie to niezła zabawa" zwróci
wartość true.
W tym przypadku znak $ wskazuje że słowo(string) powinien kończyć się słowem "programowanie",
przykład:
"Lubię programowanie" tym razem zwróci nam wartość true, gdyż tak
jak chcieliśmy kończy się słowem "programowanie", a
"Programowanie
to świetna sprawa" da wartość false;
Ten przypadek to połączenie obu powyższych czyli pasować będą tylko ścisłe słowa
w naszym wypadku tylko słowo "programowanie" da wartość true.
To wyrażenie będzie porównywało każde słowo zawierające w sobie słowo
"programowanie".
pl|de|us|gb - dzięki znakowi "|" możemy dawać kilka możliwości, działa on jak
logiczny operator OR
Powyższy przykład sprawdza czy w słowie występuje
"pl" lub "de" lub "us" lub "gb"
Kropka "." reprezentuje jakikolwiek znak, można go użyć w bardziej rozbudowanych wyrażeniach np:
ab.def - sprawdza czy słowo zawiera "ab" + jakikolwiek znak + "def".
^.+@.+..+$ - w tym wypadku sprawdzamy czy słowo jest e-mailem, a więc na początku słowa mogą być jakiekolwiek
znaki po których następuje znak "@", po nim natomiast znowu mogą
być jakiekolwiek znaki. W środku musi wystąpić kropka "." jednak
nie może być ona ostatnim znakiem w słowie.
Nawiasy kwadratowe
Wrażenia w nawiasach kwadratowych [] sprawdzają czy jakikolwiek znak
występujący w tych nawiasach występuje w słowie.
Znak "-" umożliwia określenie pewnego zakresu znaków:
[det] - sprawdza czy występuje przynajmniej jedna z liter "d" lub
"e" lub "t"
[a-z] - sprawdza czy występują małe litery
[A-Z] - sprawdza czy występują duże litery
[a-Z] - sprawdza czy występują litery
[0-9] - sprawdza czy występują cyfry
PHP posiada także "character classes" czyli już zdefiniowane zbiory znaków:
[[:alpha:]] - sprawdza czy występują małe litery
[[:alnum:]] - sprawdza czy występują litery oraz cyfry
[[:digit:]] - sprawdza czy występują cyfry
[[:xdigit:]] - sprawdza czy występują liczby w systemie 16-kowym
[[:lower:]] - sprawdza czy występują małe litery
[[:upper:]] - sprawdza czy występują duże litery
[[:punct:]] - sprawdza czy występują znaki interpunkcji
Znak ^ użyty wewnątrz nawiasów kwadratowych [] oznacza negację czyli:
[^0-9] - sprawdzi czy cyfry NIE WYSTĘPUJĄ
Nawiasy okrągłe
W nawiasach {} możemy porównywać jedno lub więcej wystąpień danego słowa/znaku
a{3} - sprawdza czy występują dokładnie trzy litery "a"
a{2,} - sprawdza czy występują dwie lub więcej liter "a"
a{3,5} - sprawdza czy występują minimalnie trzy i maksymalnie pięć liter "a"
A oto kilka przykładów:
Przy pomocy wyrażeń regularnych w bardzo prosty sposób można sprawdzić czy dane
słowo spełnia określone przez nas kryteria przykładowo:
| |
if (!ereg ("[a-zA-Z]{1,}", $nazwisko))
echo "Podałeś nieprawidłowe nazwisko";
if (!ereg ("^.+@.+\..+$", $mail))
echo "Nieprawidłowy adres e-mail";
if (!ereg ("[0-9]{1,3}", $wiek))
echo "Niemożliwe abyś miał 1000
lat albo więcej!";
if
(!ereg ("pl|de|us|gb", $panstwo))
echo "Nie podałeś wymaganego
państwa";
if (!eregi("^[[:alnum:]]{4, 6}$", $haslo))
echo "Hasło powinno zawierać
od
4 do 6 liter lub cyfr.";
|
|
Można także wyciągać ze słów określone części:
| |
$url = "http://www.inetplus.pl";
$tld = ereg("([^.]*$)", $url, $reg);
echo $reg[1];
|
|
Po wykonaniu tego kodu zwróci nam on z podanego adresu, domenę czyli w tym wypadku "pl".
W prosty i szybki sposób można zamieniać częsci słówa:
| |
$string = "skrypt-php";
$string = ereg_replace("^[^-]*", "język",
$string);
// $string przyją teraz
wartość "język-php"
echo $string;
|
|
Powyższy kod zamieni słowo "skrypt" na słowo "język".
To by było na tyle jeżeli chodzi wyrażenia regularne jak widać dzięki
nim można w prosty i szybki sposób wykonać wiele operacji związanych
ze słowami (string'ami). W sposób zwięzły i przedewszystkim szybki
zrobić to co mogłoby zająć wiele linijek kodu i czasu.
|