Ekranizimi i karaktereve speciale në regex PHP

Le të supozojmë se duam që karakteri special të përfaqësojë vetveten. Për këtë ai duhet të ekranizohet duke përdorur backslash -le. Le të shohim me shembuj.

Shembull

Në shembullin vijues, autori i regex-it deshi që shablloni i kërkimit të dukej kështu: shkronja 'a', pastaj plus '+', pastaj shkronja 'x'. Megjithatë, autori i kodit nuk e ka ekranizuar simbolin '+' dhe për këtë arsye shablloni i kërkimit në fakt duket kështu: shkronja 'a' një ose më shumë herë, pastaj shkronja 'x':

php<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a+x#', '!', $str);
?>

Si rezultat në variabël do të shkruhet si vijon:

php'a+x ! ! !'

Shembull

Tani autori e ka ekranizuar plus-in me backslash. Tani shablloni i kërkimit duket ashtu si duhet: shkronja 'a', pastaj plus '+', pastaj shkronja 'x'.

php<?php
  $str = 'a+x ax aax aaax';
  $res = preg_replace('#a\+x#', '!', $str);
?>

Si rezultat në variabël do të shkruhet si vijon:

php'! ax aax aaax'

Shembull

Në këtë shembull shablloni duket kështu: shkronja 'a', pastaj pikë '.', pastaj shkronja 'x':

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

Si rezultat në variabël do të shkruhet si vijon:

php'! abx azx'

Shembull

Në shembullin vijues autori harroi të ekranizojë pikën dhe nën regex ranë të gjitha nënvargjet, sepse pika e paekranizuar përfaqëson çdo simbol:

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

Si rezultat në variabël do të shkruhet si vijon:

php'! ! !'

Shembull

Kushtojini vëmendje faktit se nëse harroni backslash-in për pikën (kur ajo duhet të përfaqësojë vetveten) - kjo mund as që të mos vërehet:

php<?php
  preg_replace('#a.x#', '!', 'a.x'); // kthen '!', ashtu siç deshëm
?>

Vizualisht funksionon si duhet (pasi pika përfaqëson çdo simbol, përfshirë edhe pikën e zakonshme '.'). Por nëse ndryshohet vargu në të cilin bëhen zëvendësimet - do ta shohim gabimin tonë:

php<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // kthen '! ! !', kurse pritej '! abx azx'
?>