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
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'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
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'! ax aax aaax'
Primer
V tem primeru je vzorec takšen: črka
'a', nato pika '.', nato
črka 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'! 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
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'! ! !'
Primer
Opozorilo: če pozabite poševnico nazaj za piko (ko naj bi predstavljala samo sebe) - tega morda sploh ne boste opazili:
<?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
preg_replace('#a.x#', '!', 'a.x abx azx'); // vrne '! ! !', pričakovali pa smo '! abx azx'
?>