Skupiny znaků v regulárních výrazech PHP
Existují speciální příkazy, které umožňují
vybrat najednou celé skupiny znaků. Příkaz
\d znamená číslici od 0 do 9.
Příkaz \w označuje číslici, latinské
písmeno nebo znak podtržítka. Příkaz \s
označuje mezeru nebo bílý znak:
mezeru, konec řádku, tabulátor. Lze
invertovat význam příkazu napsáním velkého
písmene: například, pokud \d - číslice,
tak \D - ne číslice.
Příklad
Pojďme najít všechny číslice:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'! !! !!!'
Příklad
Operátory opakování považují příkazy-skupiny
za jeden celek, to znamená, že seskupující závorky
nejsou potřeba. V následujícím příkladu vypadá
vzorek pro vyhledávání takto: číslice od 0 do 9
jedenkrát nebo vícekrát:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'! ! ! abc @@@'
Příklad
V následujícím příkladu vypadá vzorek pro vyhledávání
takto: cokoli jedenkrát nebo vícekrát,
ale ne číslice od 0 do 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'123!3!'
Příklad
V tomto příkladu vypadá vzorek pro vyhledávání takto: bílý znak jedenkrát:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'1!12!123!abc!@@@'
Příklad
V tomto příkladu vypadá vzorek pro vyhledávání takto:
NE bílý znak jedenkrát nebo vícekrát.
Všechny podřetězce, oddělené mezerami, budou nahrazeny
na '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'! ! ! ! !'
Příklad
V tomto příkladu vypadá vzorek pro vyhledávání takto:
číslice nebo písmeno jedenkrát nebo vícekrát.
Všechny podřetězce, skládající se z číslic a písmen,
budou nahrazeny na '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Výsledek zapsaný do proměnné bude:
'! ! ! ! @@@'
Příklad
V tomto příkladu vypadá vzorek pro vyhledávání takto:
NE číslice a NE písmeno jedenkrát nebo vícekrát.
Pod tuto definici v našem případě spadá
'@@@' a všechny mezery (ty jsou také
ne číslice a ne písmena). Všimněte si
toho, že na konci je jeden '!' - do něj
se přeměnil řetězec ' @@@' - s
mezerou na začátku:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Výsledek zapsaný do proměnné bude:
'1!12!123!Abc!'
Praktické úlohy
Daný řetězec:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi jedna číslice.
Daný řetězec:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi libovolný počet číslic.
Daný řetězec:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi libovolný počet číslic (včetně
nuly číslic, tedy řetězec 'aa').
Daný řetězec:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Napište regulární výraz, který najde řetězce
následujícího typu: po okrajích stojí písmena
'a' a 'b', a mezi nimi - ne
číslo.
Daný řetězec:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Napište regulární výraz, který najde řetězce
následujícího typu: po okrajích stojí písmena
'a' a 'b', a mezi nimi - ne
písmeno a ne číslice.
Daný řetězec:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Napište regulární výraz, který nahradí všechny mezery
na '!'.