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' күтілген еді
?>