PHP-də RegEx ifadələrində xüsusi simvolların ekranlanması
Tutaq ki, biz istəyirik ki, xüsusi simvol özünü ifadə etsin. Bunun üçün onu əks slash ilə ekranlamaq lazımdır. Gəlin nümunələrlə baxaq.
Nümunə
Aşağıdakı nümunədə regulyar ifadənin müəllifi istəyirdi ki,
axtarış şablonu belə görünsün: hərf
'a', sonra plus '+', sonra
hərf 'x'. Lakin, kodun müəllifi
'+' simvolunu ekranlamayıb və buna görə də
axtarış şablonu əslində belədir:
'a' hərfi bir və ya daha çox dəfə, sonra
'x' hərfi:
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'a+x ! ! !'
Nümunə
İndi isə müəllif plusu əks slash ilə ekranlayıb.
İndi axtarış şablonu lazım olduğu kimi görünür:
'a' hərfi, sonra plus
'+', sonra 'x' hərfi.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ax aax aaax'
Nümunə
Bu nümunədə şablon belədir: 'a' hərfi,
sonra nöqtə '.', sonra
'x' hərfi:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! abx azx'
Nümunə
Aşağıdakı nümunədə isə müəllif nöqtəni ekranlamağı unudub və regulyar ifadə bütün alt sətirlərə uyğun gəldi, çünki ekranlanmamış nöqtə istənilən simvolu ifadə edir:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! !'
Nümunə
Diqqət edin ki, əgər siz nöqtə üçün əks slashi unutsanız (o, özünü ifadə etməlidir) - bunu heç hiss etməyə bilərsiniz:
<?php
preg_replace('#a.x#', '!', 'a.x'); // '!' qaytaracaq, istədiyimiz kimi
?>
Vizual olaraq düzgün işləyir (çünki nöqtə
istənilən simvolu, o cümlədən adi nöqtəni də
'.' ifadə edir). Lakin əgər əvəz olunan sətri
dəyişsək - biz səhvimizi görəcəyik:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // '! ! !' qaytaracaq, gözlənilirdi ki, '! abx azx' olsun
?>