Escaping Special Characters in PHP Regular Expressions

Predpostavimo, da želimo, da poseben znak predstavlja samega sebe. Za to ga je potrebno escapirati z uporabo poševnice nazaj. Poglejmo si primere.

Primer

V naslednjem primeru je avtor regularnega izraza želel, da bi bil vzorec iskanja takšen: črka 'a', nato plus '+', nato črka 'x'. Vendar avtor kode ni escapiral znaka '+', zato je vzorec iskanja v resnici takšen: črka 'a' enkrat ali večkrat, nato črka 'x':

php<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a+x#', '!', $str);
?>

Kot rezultat se bo v spremenljivko zapisalo naslednje:

php'a+x ! ! !'

Primer

Tokrat je avtor escapiral plus z poševnico nazaj. Zdaj je vzorec iskanja takšen, kakor mora biti: črka 'a', nato plus '+', nato črka 'x'.

php<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a\+x#', '!', $str);
?>

Kot rezultat se bo v spremenljivko zapisalo naslednje:

php'! ax aax aaax'

Primer

V tem primeru je vzorec takšen: črka 'a', nato pika '.', nato črka 'x':

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

Kot rezultat se bo v spremenljivko zapisalo naslednje:

php'! abx azx'

Primer

V naslednjem primeru je avtor pozabil escapirati poševnico in so bile ujete vse podnize, ker neescapirana pika predstavlja poljuben znak:

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

Kot rezultat se bo v spremenljivko zapisalo naslednje:

php'! ! !'

Primer

Opozorilo: če pozabite poševnico nazaj za piko (ko naj bi predstavljala samo sebe) - tega morda sploh ne boste opazili:

php<?php
  preg_replace('#a.x#', '!', 'a.x'); // vrne '!', kot smo želeli
?>

Vizualno deluje pravilno (ker pika predstavlja poljuben znak, vključno z običajno piko '.'). Toda če zamenjamo niz, v katerem potekajo zamenjave - bomo videli našo napako:

php<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // vrne '! ! !', pričakovali pa smo '! abx azx'
?>