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' күтүлгөн эмес
?>