Ескреивање специјалних карактера у регуларним изразима у PHP-у
Претпоставимо да желимо да се постигне да специјални карактер представља самог себе. За то га треба ескреивати користећи обрнуту косу црту. Хајде да погледамо на примерима.
Пример
У следећем примеру аутор регуларног израза је желео
да шаблон за претрагу изгледа овако: слово
'a', затим плус '+', затим
слово 'x'. Међутим, аутор кода
није ескреирао симбол '+' и зато
шаблон за претрагу заправо изгледа овако:
слово 'a' један или више пута, затим
слово 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'a+x ! ! !'
Пример
А сада је аутор ескреирао плус обрнутом
косом цртом. Сада шаблон за претрагу изгледа тако
како треба: слово 'a', затим плус
'+', затим слово 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ax aax aaax'
Пример
У овом примеру шаблон изгледа овако: слово
'a', затим тачка '.', затим
слово 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! abx azx'
Пример
А у следећем примеру аутор је заборавио да ескреира тачку и регуларни израз је обухватио све поднизове, јоб не-ескреирана тачка представља било који карактер:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Као резултат у променљиву ће се уписати следеће:
'! ! !'
Пример
Обратите пажњу на то да ако заборавите обрнуту косу црту за тачку (када она треба да представља саму себе) - то се може чак и не приметити:
<?php
preg_replace('#a.x#', '!', 'a.x'); // вратиће '!', као што смо и желели
?>
Визуелно ради исправно (јер тачка
представља било који карактер, укључујући и обичну
тачку '.'). Али ако променимо стринг,
у ком се врше замене - видећемо нашу
грешку:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // вратиће '! ! !', а очекивало се '! abx azx'
?>