Pomlčka vnútri množín v regulárnych výrazoch PHP
Pomlčka - tiež špeciálny znak vnútri []
(no vonku - nie). Ak potrebujete samotnú
pomlčku ako symbol - umiestnite ju tam,
kde nebude pochopená ako oddeľovač
skupiny.
Prečo je to dôležité: môžete vytvoriť skupinu
znakov, ani o tom nevediac. Napríklad,
takto - [:-@] - myslíte si, že
vyberáte dvojbodku, pomlčku a zavináč, no v
skutočnosti sa vytvorí skupina znakov medzi
: a @. Do tejto skupiny patria
nasledujúce znaky: :, ;, ?,
<, =, >.
Odkiaľ sa vzali? Z tabuľky ASCII - dvojbodka má menšie číslo ako zavináč - a vznikne skupina. To znamená, že všetky skupiny sa tvoria podľa tabuľky ASCII (ak chcete, môžete to využiť).
Ako s tým bojovať: umiestnite symbol pomlčky
tam, kde určite nebude pochopený ako
symbol skupiny, napríklad na začiatku alebo na konci
(to znamená za [ alebo pred ]).
Tiež môžete pomlčku escapovať - potom
bude znamenať samu seba bez ohľadu na
pozíciu. Napríklad, namiesto [:-@] napísať
[:\-@] - a skupina už nevznikne,
budú tam tri znaky - dvojbodka, pomlčka a zavináč @.
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
číslica 1, potom písmeno od 'a'
do 'z', potom číslica 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! 1-2 ! !'
Príklad
Poďme teraz escapovať pomlčku. Výsledkom
je vyhľadávací vzor taký: číslica 1, potom
písmeno 'a', alebo pomlčka, alebo písmeno 'z',
potom číslica 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! 1c2 !'
Príklad
Môžete jednoducho presunúť pomlčku, bez escapovania:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! 1c2 !'
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
prvý symbol - to sú malé písmená alebo
pomlčka '-', potom dve písmená 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! Axx ! @xx'
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
prvý symbol - to sú malé, veľké
písmená alebo pomlčka '-', potom dve písmená
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! @xx'
Príklad
Môžete umiestniť pomlčku medzi dve skupiny - tam určite ešte nevytvorí ďalšiu skupinu:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! @xx'
Praktické úlohy
Daný reťazec:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Nájdite všetky reťazce podľa nasledujúceho vzoru:
písmeno 'x', veľké alebo malé
písmeno alebo pomlčka, písmeno 'z'.
Daný reťazec:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Nájdite všetky reťazce podľa nasledujúceho vzoru:
písmeno 'x', potom alebo dolár, alebo
pomlčka alebo plus, potom písmeno 'z'.