Экраноўка спецсімвалаў у рэгулярках 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'
?>