⊗ppPmRgESCh 226 of 447 menu

Escaping special characters in PHP regex

Antag att vi vill göra så att ett specialtecken representerar sig självt. För att göra detta måste det escapes med ett omvänt snedstreck. Låt oss titta på exempel.

Exempel

I följande exempel ville författaren till det reguljära uttrycket att sökmönstret skulle se ut så här: bokstaven 'a', sedan ett plus '+', sedan bokstaven 'x'. Men författaren till koden escapade inte tecknet '+' och därför ser sökmönstret egentligen ut så här: bokstaven 'a' en eller flera gånger, sedan bokstaven 'x':

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

Som ett resultat kommer följande att skrivas till variabeln:

'a+x ! ! !'

Exempel

Den här gången har författaren escapat plustecknet med ett omvänt snedstreck. Nu ser sökmönstret ut som det ska: bokstaven 'a', sedan ett plus '+', sedan bokstaven 'x'.

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

Som ett resultat kommer följande att skrivas till variabeln:

'! ax aax aaax'

Exempel

I det här exemplet ser mönstret ut så här: bokstaven 'a', sedan en punkt '.', sedan bokstaven 'x':

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

Som ett resultat kommer följande att skrivas till variabeln:

'! abx azx'

Exempel

I nästa exempel glömde författaren att escap snedstrecket och alla delsträngar träffades av det reguljära uttrycket, eftersom en oescaped punkt representerar vilket tecken som helst:

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

Som ett resultat kommer följande att skrivas till variabeln:

'! ! !'

Exempel

Observera att om du glömmer det omvända snedstrecket för punkten (när den ska representera sig själv) - så kanske du inte ens märker det:

<?php preg_replace('#a.x#', '!', 'a.x'); // returnerar '!', som vi ville ?>

Visuellt fungerar det korrekt (eftersom punkten representerar vilket tecken som helst, inklusive en vanlig punkt '.'). Men om vi ändrar strängen där ersättningarna sker - kommer vi att se vårt misstag:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // returnerar '! ! !', men förväntat var '! abx azx' ?>
ruitbnhyda