Pomlčka uvnitř množin v regulárních výrazech PHP
Pomlčka - také speciální symbol uvnitř []
(zvenčí - ne). Pokud potřebujete samotnou
pomlčku jako symbol - umístěte ji tam,
kde nebude pochopená jako oddělovač
skupiny.
Proč je to důležité: můžete vytvořit skupinu
symbolů, aniž byste si toho všimli. Například,
takto - [:-@] - myslíte si, že
vybíráte dvojtečku, pomlčku a zavináč, ale
ve skutečnosti vznikne skupina symbolů mezi
: a @. Do této skupiny patří
následující symboly: :, ;, ?,
<, =, >.
Odkud se vzaly? Z tabulky ASCII - dvojtečka má nižší číslo než zavináč - a vzniká skupina. To znamená, že všechny skupiny jsou tvořeny podle tabulky ASCII (lze toho využít).
Jak s tím bojovat: umístěte symbol pomlčky
tam, kde rozhodně nebude pochopen jako
symbol skupiny, například na začátek nebo na konec
(tedy za [ nebo před ]).
Pomlčku lze také escapovat - pak
bude vždy představovat samu sebe bez ohledu na
pozici. Například, místo [:-@] napsat
[:\-@] - a skupina již nevznikne,
budou tam tři symboly - dvojtečka, pomlčka a zavináč @.
Příklad
V následujícím příkladu je vzor hledání tento:
číslice 1, poté písmeno od 'a'
do 'z', poté číslice 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! 1-2 ! !'
Příklad
Nyní pojďme escapovat pomlčku. Výsledkem
bude vzor hledání tento: číslice 1, poté
písmeno 'a', nebo pomlčka, nebo písmeno 'z',
poté číslice 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! ! 1c2 !'
Příklad
Lze jednoduše přemístit pomlčku, aniž byste ji escapovali:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! ! 1c2 !'
Příklad
V následujícím příkladu je vzor hledání tento:
první symbol - to jsou malá písmena nebo
pomlčka '-', poté dvě písmena 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! Axx ! @xx'
Příklad
V následujícím příkladu je vzor hledání tento:
první symbol - to jsou malá, velká
písmena nebo pomlčka '-', poté dvě písmena
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! ! ! @xx'
Příklad
Pomlčku lze umístit mezi dvě skupiny - tam rozhodně nevytvoří další skupinu:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Výsledkem bude do proměnné zapsáno následující:
'! ! ! @xx'
Praktické úlohy
Je dán řetězec:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Najděte všechny řetězce podle následujícího vzoru:
písmeno 'x', velké nebo malé
písmeno nebo pomlčka, písmeno 'z'.
Je dán řetězec:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Najděte všechny řetězce podle následujícího vzoru:
písmeno 'x', poté nebo dolar, nebo
pomlčka nebo plus, poté písmeno 'z'.