⊗ppPmRgESCh 226 of 447 menu

Escaping af specialtegn i PHP regulære udtryk

Antag at vi ønsker at gøre så et specialtegn repræsenterer sig selv. For at gøre dette skal det escapes med en omvendt skråstreg. Lad os se på nogle eksempler.

Eksempel

I det følgende eksempel ønskede forfatteren af det regulære udtryk, at søgemønstret skulle se sådan ud: bokstavet 'a', derefter plus '+', derefter bogstavet 'x'. Men forfatteren af koden escapede ikke tegnet '+', og derfor ser søgemønstret faktisk sådan ud: bokstavet 'a' en eller flere gange, derefter bogstavet 'x':

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

Resultatet i variablen vil være følgende:

'a+x ! ! !'

Eksempel

I dette tilfælde har forfatteren escapet plus-tegnet med en omvendt skråstreg. Nu ser søgemønstret ud som det skal: bokstavet 'a', derefter plus '+', derefter bogstavet 'x'.

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

Resultatet i variablen vil være følgende:

'! ax aax aaax'

Eksempel

I dette eksempel ser mønstret sådan ud: bokstavet 'a', derefter punktum '.', derefter bogstavet 'x':

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

Resultatet i variablen vil være følgende:

'! abx azx'

Eksempel

I det følgende eksempel glemte forfatteren at escape skråstregen, og det regulære udtryk ramte alle delstrenge, da en ikke-escapet punktum repræsenterer ethvert tegn:

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

Resultatet i variablen vil være følgende:

'! ! !'

Eksempel

Vær opmærksom på, at hvis du glemmer den omvendte skråstreg for punktum (når den skal repræsentere sig selv) - kan det være man ikke lægger mærke til det:

<?php preg_replace('#a.x#', '!', 'a.x'); // returnerer '!', som vi ønskede ?>

Visuelt fungerer det korrekt (da punktum repræsenterer ethvert tegn, inklusive et almindeligt punktum '.'). Men hvis strengen, hvor erstatningerne foretages, ændres - vil vi se vores fejl:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // returnerer '! ! !', men forventet var '! abx azx' ?>
uzcmsuzhyhi