⊗ppPmRgESCh 226 of 447 menu

Екраниране на специални символи в регулярни изрази в PHP

Да предположим, че искаме да направим така, че специален символ да обозначава себе си. За целта той трябва да бъде екраниран с помощта на обратна наклонена черта. Нека да разгледаме примери.

Пример

В следващия пример авторът на регулярния израз искал шаблонът за търсене да изглежда така: буква 'a', последвана от плюс '+', последвана от буква 'x'. Обаче, авторът на кода не е екранирал символа '+' и затова шаблонът за търсене всъщност изглежда така: буква 'a' един или повече пъти, след това буква 'x':

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

В резултат в променливата ще бъде записано следното:

'a+x ! ! !'

Пример

А сега авторът е екранирал плюса с обратна наклонена черта. Сега шаблонът за търсене изглежда така, както трябва: буква 'a', последвана от плюс '+', последвана от буква 'x'.

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

В резултат в променливата ще бъде записано следното:

'! ax aax aaax'

Пример

В този пример шаблонът изглежда така: буква 'a', последвана от точка '.', последвана от буква 'x':

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

В резултат в променливата ще бъде записано следното:

'! abx azx'

Пример

В следващия пример авторът забравил да екранира точката и под регулярния израз попаднали всички поднизове, тъй като неекранирана точка обозначава всякакъв символ:

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

В резултат в променливата ще бъде записано следното:

'! ! !'

Пример

Обърнете внимание на това, че ако забравите обратната наклонена черта за точката (когато тя трябва да обозначава сама себе си) - това може дори да не бъде забелязано:

<?php preg_replace('#a.x#', '!', 'a.x'); // ще върне '!', както сме искали ?>

Визуално работи правилно (тъй като точката обозначава всякакъв символ, включително и обикновената точка '.'). Но ако променим низа, в който се извършват замените - ще видим нашата грешка:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // ще върне '! ! !', а се очакваше '! abx azx' ?>
Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне