PHP regulaaravaldistes erisümbolite ekraanimine
Oletame, et tahame, et erisümbol tähendaks iseennast. Selleks tuleb see ekraanida kurakaldkriipsuga (backslash). Vaatame näidete varal.
Näide
Järgmises näites soovis regulaaravaldise autor,
et otsimustempl näeks välja selline: täht
'a', seejärel pluss '+', seejärel
täht 'x'. Siiski ei ekraaninud koodi
autor sümbolit '+' ja seetõttu
on otsimustempl tegelikult selline:
täht 'a' üks või mitu korda, siis
täht 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'a+x ! ! !'
Näide
Nüüd on autor ekraaninud plussmärgi kurakaldkriipsuga.
Nüüd näeb otsimustempl välja nagu vaja: täht
'a', seejärel pluss '+', seejärel
täht 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ax aax aaax'
Näide
Selles näites on templiks: täht
'a', seejärel punkt '.', seejärel
täht 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! abx azx'
Näide
Järgmises näites unustas autor ekraanida kaldkriipsu ja regulaaravaldisele vastasid kõik alamjadad, kuna ekraanimata punkt tähendab suvalist sümbolit:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ! !'
Näide
Pange tähele, et kui unustate punkti jaoks kurakaldkriipsu (kui see peaks tähendama iseennast) - võib seda isegi ei märgata:
<?php
preg_replace('#a.x#', '!', 'a.x'); // tagastab '!', nagu me soovisimegi
?>
Visuaalselt töötab õigesti (kuna punkt
tähendab suvalist sümbolit, sealhulgas ka tavalist
punkti '.'). Kuid kui muuta jada,
milles asendused toimuvad - näeme oma
viga:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // tagastab '! ! !', kuid oodati '! abx azx'
?>