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<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a+x#', '!', $str);
?>

Dėl to į kintamąjį bus įrašyta taip:

php'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<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a\+x#', '!', $str);
?>

Dėl to į kintamąjį bus įrašyta taip:

php'! ax aax aaax'

Pavyzdys

Šiame pavyzdyje šablonas atrodo taip: raidė 'a', tada taškas '.', tada raidė 'x':

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

Dėl to į kintamąjį bus įrašyta taip:

php'! 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<?php
  $str = 'a.x abx azx';
  $res = preg_replace('#a.x#', '!', $str);
?>

Dėl to į kintamąjį bus įrašyta taip:

php'! ! !'

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<?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<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // grąžins '! ! !', o tikėtasi '! abx azx'
?>