Skupiny znakov v regulárnych výrazoch PHP
Existujú špeciálne príkazy, ktoré umožňujú
vybrať naraz celé skupiny znakov. Príkaz
\d znamená číslicu od 0 do 9.
Príkaz \w označuje číslicu, latinské
písmeno alebo znak podčiarknutia. Príkaz \s
označuje medzeru alebo medzerový znak:
medzera, koniec riadku, tabulátor. Môžeme
invertovať hodnotu príkazu napísaním veľkého
písmena: napríklad, ak \d je číslica,
tak \D je nie číslica.
Príklad
Poďme nájsť všetky číslice:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! !! !!!'
Príklad
Operátory opakovania považujú príkazy-skupiny
za jeden celok, to znamená, že zoskupujúce zátvorky
nie sú potrebné. V nasledujúcom príklade vyhľadávací vzor
vyzerá takto: číslica od 0 do 9
jeden alebo viac krát:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! abc @@@'
Príklad
V nasledujúcom príklade vyhľadávací vzor vyzerá
takto: čokoľvek jeden alebo viac krát,
ale nie číslica od 0 do 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'123!3!'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto: medzerový znak jeden krát:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'1!12!123!abc!@@@'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
NIE medzerový znak jeden alebo viac krát.
Všetky podreťazce, oddelené medzerami, sa nahradia
na '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! ! !'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
číslica alebo písmeno jeden alebo viac krát.
Všetky podreťazce, pozostávajúce z číslic a písmen,
sa nahradia na '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! ! @@@'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
NIE číslica a NIE písmeno jeden alebo viac krát.
Pod túto definíciu v našom prípade spadá
'@@@' a všetky medzery (tie sú tiež
nie číslice a nie písmená). Dávajte pozor na
to, že na konci je jedna '!' - do nej
sa pretransformoval reťazec ' @@@' - s
medzerou na začiatku:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Výsledkom do premennej sa zapíše nasledovné:
'1!12!123!Abc!'
Praktické úlohy
Daný reťazec:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi jedna číslica.
Daný reťazec:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi ľubovoľný počet číslic.
Daný reťazec:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi ľubovoľný počet číslic (vrátane
nuly číslic, teda reťazec 'aa').
Daný reťazec:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Napíšte regulárny výraz, ktorý nájde reťazce
nasledovného typu: po okrajoch stoja písmená
'a' a 'b', a medzi nimi - nie
číslo.
Daný reťazec:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Napíšte regulárny výraz, ktorý nájde reťazce
nasledovného typu: po okrajoch stoja písmená
'a' a 'b', a medzi nimi - nie
písmeno a nie číslica.
Daný reťazec:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Napíšte regulárny výraz, ktorý nahradí všetky medzery
na '!'.