Ontsnapping van spesiale karakters in PHP regulêre uitdrukkings
Veronderstel dat ons wil hê dat 'n spesiale karakter homself moet verteenwoordig. Om dit te doen moet dit ontsnap word met 'n agteroorskuinsstreep. Laat ons na voorbeelde kyk.
Voorbeeld
In die volgende voorbeeld wou die skrywer van die regulêre uitdrukking
dat die soekpatroon so moes lyk: letter
'a', dan plus '+', dan
letter 'x'. Die skrywer van die kode het
egter nie die simbool '+' ontskap nie en daarom
lyk die soekpatroon eintlik so:
letter 'a' een of meer keer, dan
letter 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Gevolglik sal die volgende in die veranderlike weggeskryf word:
'a+x ! ! !'
Voorbeeld
Nou het die skrywer die plus met 'n agteroorskuinsstreep ontskap.
Nou lyk die soekpatroon soos dit moet wees: letter 'a', dan plus
'+', dan letter 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Gevolglik sal die volgende in die veranderlike weggeskryf word:
'! ax aax aaax'
Voorbeeld
In hierdie voorbeeld lyk die patroon so: letter
'a', dan punt '.', dan
letter 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Gevolglik sal die volgende in die veranderlike weggeskryf word:
'! abx azx'
Voorbeeld
In die volgende voorbeeld het die skrywer vergeet om die punt te ontskap en die regulêre uitdrukking het alle substrings getref, aangesien 'n nie-ontskapte punt enige karakter verteenwoordig:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Gevolglik sal die volgende in die veranderlike weggeskryf word:
'! ! !'
Voorbeeld
Let daarop dat as jy die agteroorskuinsstreep vir die punt vergeet (wanneer dit homself moet verteenwoordig) - kan 'n mens dit selfs nie raaksien nie:
<?php
preg_replace('#a.x#', '!', 'a.x'); // sal '!' terugstuur, soos ons wou
?>
Visueel werk dit korrek (aangesien die punt
enige karakter verteenwoordig, insluitend 'n gewone
punt '.'). Maar as ons die string
waarin die vervangings plaasvind verander - sal ons ons
fout sien:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // sal '! ! !' terugstuur, terwyl '! abx azx' verwag is
?>