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<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a+x#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'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<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a\+x#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! ax aax aaax'

Primer

U ovom primeru šablon izgleda ovako: slovo 'a', zatim tačka '.', zatim slovo 'x':

php<?php
  $str = 'a.x abx azx';
  $res = preg_replace('#a\.x#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! 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<?php
  $str = 'a.x abx azx';
  $res = preg_replace('#a.x#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! ! !'

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<?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<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // vratiće '! ! !', a očekivalo se '! abx azx'
?>