⊗ppPmRgESCh 226 of 447 menu

Escapování speciálních znaků v regulárních výrazech PHP

Předpokládejme, že chceme, aby speciální znak označoval sám sebe. K tomu je potřeba jej escapovat pomocí zpětného lomítka. Podívejme se na příkladech.

Příklad

V následujícím příkladu autor regulárního výrazu chtěl, aby vyhledávací šablona vypadala takto: písmeno 'a', poté plus '+', poté písmeno 'x'. Avšak autor kódu neescapoval symbol '+', a proto vyhledávací šablona ve skutečnosti vypadá takto: písmeno 'a' jedno nebo vícekrát, poté písmeno 'x':

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

Výsledek zapsaný do proměnné bude následující:

'a+x ! ! !'

Příklad

A nyní autor escapoval plus zpětným lomítkem. Nyní vyhledávací šablona vypadá tak, jak má: písmeno 'a', poté plus '+', poté písmeno 'x'.

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

Výsledek zapsaný do proměnné bude následující:

'! ax aax aaax'

Příklad

V tomto příkladu šablona vypadá takto: písmeno 'a', poté tečka '.', poté písmeno 'x':

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

Výsledek zapsaný do proměnné bude následující:

'! abx azx'

Příklad

V následujícím příkladu autor zapomněl escapovat lomítko a regulární výraz zachytil všechny podřetězce, protože neescapovaná tečka označuje libovolný znak:

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

Výsledek zapsaný do proměnné bude následující:

'! ! !'

Příklad

Všimněte si, že pokud zapomenete zpětné lomítko pro tečku (když má označovat sama sebe) - lze to snadno přehlédnout:

<?php preg_replace('#a.x#', '!', 'a.x'); // vrátí '!', jak jsme chtěli ?>

Vizuálně to funguje správně (protože tečka označuje libovolný znak, včetně obyčejné tečky '.'). Ale pokud změníme řetězec, ve kterém se provádějí nahrazení - uvidíme naši chybu:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // vrátí '! ! !', ale očekávalo se '! abx azx' ?>
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout