Grupy znaków w wyrażeniach regularnych PHP
Istnieją specjalne komendy, które pozwalają
wybrać od razu całe grupy znaków. Komenda
\d oznacza cyfrę od 0 do 9.
Komenda \w oznacza cyfrę, łacińską
literę lub znak podkreślenia. Komenda \s
oznacza spację lub znak spacji:
spację, znak nowej linii, tabulację. Można
odwrócić znaczenie komendy, pisząc wielką
literę: na przykład, jeśli \d - cyfra,
to \D - nie cyfra.
Przykład
Znajdźmy wszystkie cyfry:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'! !! !!!'
Przykład
Operatory powtórzenia traktują komendy-grupy
jako całość, to znaczy nawiasy grupujące
nie są potrzebne. W następnym przykładzie wzorzec wyszukiwania
wygląda tak: cyfra od 0 do 9
jeden lub więcej razy:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'! ! ! abc @@@'
Przykład
W następnym przykładzie wzorzec wyszukiwania wygląda
tak: cokolwiek jeden lub więcej razy,
ale nie cyfra od 0 do 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'123!3!'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak: znak spacji jeden raz:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'1!12!123!abc!@@@'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
NIE znak spacji jeden lub więcej razy.
Wszystkie podciągi, oddzielone spacjami, zostaną zastąpione
na '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'! ! ! ! !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
cyfra lub litera jeden lub więcej razy.
Wszystkie podciągi, składające się z cyfr i liter,
zostaną zastąpione na '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
W wyniku do zmiennej zostanie zapisane następujące:
'! ! ! ! @@@'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
NIE cyfra i NIE litera jeden lub więcej razy.
W rozpatrywanym przypadku do tej definicji kwalifikuje się
'@@@' i wszystkie spacje (one przecież też
nie są cyframi ani literami). Zwróć uwagę na
to, że na końcu jedna '!' - w nią
przekształcił się ciąg ' @@@' - ze
spacją na początku:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
W wyniku do zmiennej zostanie zapisane następujące:
'1!12!123!Abc!'
Zadania praktyczne
Dany jest ciąg:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Napisz wyrażenie regularne, które znajdzie ciągi,
w których po brzegach stoją litery 'a',
a między nimi jedna cyfra.
Dany jest ciąg:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Napisz wyrażenie regularne, które znajdzie ciągi,
w których po brzegach stoją litery 'a',
a między nimi dowolna liczba cyfr.
Dany jest ciąg:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Napisz wyrażenie regularne, które znajdzie ciągi,
w których po brzegach stoją litery 'a',
a między nimi dowolna liczba cyfr (w tym
również zero cyfr, to znaczy ciąg 'aa').
Dany jest ciąg:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Napisz wyrażenie regularne, które znajdzie ciągi
następującego rodzaju: po brzegach stoją litery
'a' i 'b', a między nimi - nie
liczba.
Dany jest ciąg:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Napisz wyrażenie regularne, które znajdzie ciągi
następującego rodzaju: po brzegach stoją litery
'a' i 'b', a między nimi - nie
litera i nie cyfra.
Dany jest ciąg:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Napisz wyrażenie regularne, które zamieni wszystkie spacje
na '!'.