Цртица унутар скупова у регуларним изразима PHP
Цртица - такође специјални симбол унутар []
(али споља - није). Ако вам треба сама
цртица као симбол - онда је ставите тамо,
где она неће бити схваћена као раздвајач
групе.
Зашто је ово важно: можете направити групу
симбола, сами то не приметивши. На пример,
овако - [:-@] - ви мислите да
изабирате двотачку, цртицу и симбол @, а у
ствари се добија група симбола између
: и @. У ову групу улазе
следећи симболи: :, ;, ?,
<, =, >.
Одакле су се појавили? Из табеле ASCII - двотачка има мањи број, него симбол @ - и добија се група. То значи све групе добијају се по ASCII табели (ако желите овим се може користити).
Како се борити са овим: ставите симбол цртице
тамо, где он сигурно неће бити схваћен као
симбол групе, на пример, на почетку или на крају
(то јест после [ или пре ]).
Може се такође екранирати цртица - онда
она ће означавати саму себе независно од
позиције. На пример, уместо [:-@] написати
[:\-@] - и групе већ неће бити, а
биће три симбола - двотачка, цртица и симбол @.
Пример
У следећем примеру шаблон претраге је овакав:
цифра 1, затим слово од 'a'
до 'z', затим цифра 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! 1-2 ! !'
Пример
Хајде сада да екранирамо цртицу. Као резултат
шаблон претраге је овакав: цифра 1, затим
слово 'a', или цртица, или слово 'z',
затим цифра 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ! 1c2 !'
Пример
Може се једноставно преместити цртица, без њеног екранирања:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ! 1c2 !'
Пример
У следећем примеру шаблон претраге је овакав:
први симбол - то су мала слова или
цртица '-', затим два слова 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! Axx ! @xx'
Пример
У следећем примеру шаблон претраге је овакав:
први симбол - то су мала, велика
слова или цртица '-', затим два слова
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ! ! @xx'
Пример
Може се поставити цртица између две групе - тамо она сигурно неће направити још једну групу:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ! ! @xx'
Практични задаци
Дат је стринг:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Пронађите све стрингове по следећем шаблону:
слово 'x', велико или мало
слово или цртица, слово 'z'.
Дат је стринг:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Пронађите све стрингове по следећем шаблону:
слово 'x', затим или знак долара, или
цртица или знак плус, затим слово 'z'.