Ekriranje specijalnih karaktera u regex-u PHP
Pretpostavimo da želimo da učinimo da specijalni karakter označava samog sebe. Za to ga treba ekranirati koristeći obrnutu kosu crtu. Hajde da pogledamo na primerima.
Primer
U sledećem primeru autor regex-a je želeo
da šablon pretrage izgleda ovako: slovo
'a', zatim plus '+', zatim
slovo 'x'. Međutim, autor koda
nije ekranirao znak '+' i zato
šablon pretrage zapravo izgleda ovako:
slovo 'a' jedan ili više puta, zatim
slovo 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Kao rezultat, u promenljivu će biti upisano sledeće:
'a+x ! ! !'
Primer
Sada je autor ekranirao plus obrnutom
kosom crtom. Sada šablon pretrage izgleda onako
kako treba: slovo 'a', zatim plus
'+', zatim slovo 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Kao rezultat, u promenljivu će biti upisano sledeće:
'! ax aax aaax'
Primer
U ovom primeru šablon izgleda ovako: slovo
'a', zatim tačka '.', zatim
slovo 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Kao rezultat, u promenljivu će biti upisano sledeće:
'! abx azx'
Primer
U sledećem primeru autor je zaboravio da ekranira tačku i pod regex su upale sve podniske, pošto neekranirana tačka označava bilo koji znak:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Kao rezultat, u promenljivu će biti upisano sledeće:
'! ! !'
Primer
Obratite pažnju na to da ako zaboravite obrnutu kosu crtu za tačku (kada ona treba da označava samu sebe) - to se možda neće ni primetiti:
<?php
preg_replace('#a.x#', '!', 'a.x'); // vratiće '!', kao što smo i želeli
?>
Vizuelno radi ispravno (pošto tačka
označava bilo koji znak, uključujući i običnu
tačku '.'). Ali ako promenimo string
u kojem se vrše zamene - videćemo našu
grešku:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // vratiće '! ! !', a očekivalo se '! abx azx'
?>