Speciālo rakstzīmju ekrānēšana PHP regulārajās izteiksmēs
Pieņemsim, ka mēs vēlamies, lai speciālā rakstzīme apzīmētu pati sevi. Lai to izdarītu, tā ir jāekrānē, izmantojot apgriezto slīpsvītru. Apskatīsim to ar piemēriem.
Piemērs
Nākamajā piemērā regulārās izteiksmes autors vēlējās,
lai meklēšanas šablons izskatītos šādi: burtss
'a', tad plus zīme '+', tad
burts 'x'. Tomēr, koda autors
neekrānēja simbolu '+', un tāpēc
meklēšanas šablons patiesībā izskatās šādi:
burts 'a' viens vai vairāk reižu, tad
burts 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'a+x ! ! !'
Piemērs
Bet šajā piemērā autors ir ekrānējis plus zīmi ar apgriezto
slīpsvītru. Tagad meklēšanas šablons izskatās tieši tā,
kā vajag: burts 'a', tad plus zīme
'+', tad burts 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ax aax aaax'
Piemērs
Šajā piemērā šablons izskatās šādi: burts
'a', tad punkts '.', tad
burts 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! abx azx'
Piemērs
Nākamajā piemērā autors aizmirsa ekrānēt slīpsvītru un ar regulāro izteiksmi tika iekļautas visas apakšvirknes, jo neekrānēts punkts apzīmē jebkuru simbolu:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ! !'
Piemērs
Ievērojiet, ka, ja aizmirsīsiet apgriezto slīpsvītru punktam (kad tam vajadzētu apzīmēt pats sevi) - to var pat nepamanīt:
<?php
preg_replace('#a.x#', '!', 'a.x'); // atgriezīs '!', kā mēs arī vēlējāmies
?>
Vizuāli darbojas pareizi (tā kā punkts
apzīmē jebkuru simbolu, tostarp arī parastu
punktu '.'). Bet, ja mainīsiet virkni,
kurā tiek veiktas aizstāšanas - mēs redzēsim savu
kļūdu:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // atgriezīs '! ! !', bet tika gaidīts '! abx azx'
?>