Specialiųjų simbolių ekranavimas PHP reguliariosiose išraiškose
Tarkime, kad norime, kad specialusis simbolis reikštų pats save. Tam jį reikia ekranuoti naudojant atgalinį brūkšnį. Pažiūrėkime pavyzdžiais.
Pavyzdys
Šiame pavyzdyje reguliariosios išraiškos autorius norėjo,
kad paieškos šablonas atrodytų taip: raidė
'a', tada pliusas '+', tada
raidė 'x'. Tačiau, kodo autorius
neekranavo simbolio '+' ir todėl
paieškos šablonas iš tikrųjų atrodo taip:
raidė 'a' vieną ar daugiau kartų, po to
raidė 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Dėl to į kintamąjį bus įrašyta taip:
'a+x ! ! !'
Pavyzdys
O dabar autorius ekranavo pliusą atgaliniu
brūkšniu. Dabar paieškos šablonas atrodo taip,
kaip reikia: raidė 'a', tada pliusas
'+', tada raidė 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Dėl to į kintamąjį bus įrašyta taip:
'! ax aax aaax'
Pavyzdys
Šiame pavyzdyje šablonas atrodo taip: raidė
'a', tada taškas '.', tada
raidė 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Dėl to į kintamąjį bus įrašyta taip:
'! abx azx'
Pavyzdys
Kitame pavyzdyje autorius pamiršo ekranuoti brūkšnį ir pagal reguliariąją išraišką pataikė į visus poeilutes, nes neekranuotas taškas reiškia bet kurį simbolį:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Dėl to į kintamąjį bus įrašyta taip:
'! ! !'
Pavyzdys
Atkreipkite dėmesį į tai, kad jei pamiršite atgalinį brūkšnį taškui (kai jis turi reikšti pats save) - to galima net nepastebėti:
<?php
preg_replace('#a.x#', '!', 'a.x'); // grąžins '!', kaip ir norėjome
?>
Vizualiai veikia teisingai (kadangi taškas
reiškia bet kurį simbolį, taip pat ir įprastą
tašką '.'). Bet jei pakeisime eilutę,
kurioje vyksta pakeitimai - pamatysime savo
klaidą:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // grąžins '! ! !', o tikėtasi '! abx azx'
?>