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

Rezultātā mainīgajā ierakstīsies sekojošais:

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

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ax aax aaax'

Piemērs

Šajā piemērā šablons izskatās šādi: burts 'a', tad punkts '.', tad burts 'x':

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

Rezultātā mainīgajā ierakstīsies sekojošais:

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

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ! !'

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<?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<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // atgriezīs '! ! !', bet tika gaidīts '! abx azx'
?>