⊗ppPmRgESCh 226 of 447 menu

Erikoismerkkien escapaus PHP:n regexeissä

Oletetaan, että haluamme tehdä niin, että erikoismerkki tarkoittaa itseään. Tätä varten sitä täytyy escapata kenoviivalla. Katsotaanpa esimerkein.

Esimerkki

Seuraavassa esimerkissä regexin tekijä halusi, että hakumalli näyttäisi tältä: kirjain 'a', sitten plus '+', sitten kirjain 'x'. Kuitenkin, koodin tekijä ei escapannut merkkiä '+' ja siksi hakumalli itse asiassa näyttää tältä: kirjain 'a' yksi tai useampi kerta, sitten kirjain 'x':

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

Tuloksena muuttujaan kirjoitetaan seuraava:

'a+x ! ! !'

Esimerkki

Mutta nyt tekijä on escapannut plus-merkin kenoviivalla. Nyt hakumalli näyttää siltä kuin pitääkin: kirjain 'a', sitten plus '+', sitten kirjain 'x'.

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

Tuloksena muuttujaan kirjoitetaan seuraava:

'! ax aax aaax'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: kirjain 'a', sitten piste '.', sitten kirjain 'x':

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

Tuloksena muuttujaan kirjoitetaan seuraava:

'! abx azx'

Esimerkki

Seuraavassa esimerkissä tekijä unohti escapata pisteen ja regex osui kaikkiin alimerkkijonoihin, koska escapaamaton piste tarkoittaa mitä tahansa merkkiä:

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

Tuloksena muuttujaan kirjoitetaan seuraava:

'! ! !'

Esimerkki

Huomaa, että jos unohdat kenoviivan pisteelle (kun sen pitäisi tarkoittaa itseään) - tätä ei ehkä edes huomaa:

<?php preg_replace('#a.x#', '!', 'a.x'); // palauttaa '!', kuten halusimmekin ?>

Visuaalisesti toimii oikein (koska piste tarkoittaa mitä tahansa merkkiä, myös tavallista pistettä '.'). Mutta jos vaihdat merkkijonoa, jossa korvaukset tapahtuvat - näemme virheemme:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // palauttaa '! ! !', odotettiin '! abx azx' ?>
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää