PHP-ի ռեգուլյար արտահայտություններում հատուկ նիշերի էկրանավորում

Ենթադրենք, որ մենք ուզում ենք, որ հատուկ նիշը նշանակի ինքն իրեն: Դրա համար այն պետք է էկրանավորել հակադարձ շեղի միջոցով: Եկեք նայենք օրինակներով:

Օրինակ

Հաջորդ օրինակում ռեգուլյար արտահայտության հեղինակը ուզում էր, որ որոնման ձևանմուշը այսպիսի տեսք ունենա. տառ 'a', ապա պլյուս '+', ապա տառ 'x': Սակայն, կոդի հեղինակը չէկրանավորեց '+' նիշը, և այդ պատճառով որոնման ձևանմուշը իրականում այսպիսի տեսք ունի. տառ 'a' մեկ կամ ավելի անգամ, հետո տառ 'x':

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

Արդյունքում փոփոխականի մեջ կգրվի հետևյալը.

php'a+x ! ! !'

Օրինակ

Իսկ այժմ հեղինակը էկրանավորել է պլյուսը հակադարձ շեղով: Այժմ որոնման ձևանմուշը այնպիսի տեսք ունի, ինչպես պետք է. տառ 'a', ապա պլյուս '+', ապա տառ 'x':

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

Արդյունքում փոփոխականի մեջ կգրվի հետևյալը.

php'! ax aax aaax'

Օրինակ

Այս օրինակում ձևանմուշը այսպիսի տեսք ունի. տառ 'a', ապա կետ '.', ապա տառ 'x':

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

Արդյունքում փոփոխականի մեջ կգրվի հետևյալը.

php'! abx azx'

Օրինակ

Հաջորդ օրինակում հեղինակը մոռացել է էկրանավորել կետը, և ռեգուլյար արտահայտությանը համապատասխանել են բոլոր ենթատողերը, քանի որ չէկրանավորված կետը նշանակում է ցանկացած նիշ.

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

Արդյունքում փոփոխականի մեջ կգրվի հետևյալը.

php'! ! !'

Օրինակ

Ուշադրություն դարձրեք, որ եթե դուք մոռանաք հակադարձ շեղը կետի համար (երբ այն պետք է նշանակի ինքն իրեն) - դա կարելի է նույնիսկ չնկատել.

php<?php
  preg_replace('#a.x#', '!', 'a.x'); // կվերադարձնի '!', ինչպես մենք էլ ուզում էինք
?>

Տեսողականորեն աշխատում է ճիշտ (քանի որ կետը նշանակում է ցանկացած նիշ, ներառյալ սովորական կետը '.'): Բայց եթե փոխենք այն տողը, որում կատարվում են փոխարինումները - մենք կտեսնենք մեր սխալը.

php<?php
  preg_replace('#a.x#', '!', 'a.x abx azx'); // կվերադարձնի '! ! !', իսկ սպասվում էր '! abx azx'
?>