PHP-də RegEx daxilində çizgi işarəsi dəstləri
Çizgi işarəsi də [] daxilində xüsusi simvoldur
(ancaq xaricində - deyil). Əgər sizə çizgi işarəsi özü simvol kimi lazımdırsa - onu elə yerdə qoyun ki,
qrup ayırıcısı kimi qəbul edilməsin.
Bu niyə vacibdir: siz özünüz də hiss etmədən simvol qrupu yarada bilərsiniz. Məsələn,
bununla - [:-@] - siz düşünürsünüz ki,
iki nöqtə, çizgi işarəsi və @ simvolunu seçirsiniz, amma əslində
: və @ arasındakı simvol qrupu alınır. Bu qrupa
aşağıdakı simvollar daxildir: :, ;, ?,
<, =, >.
Onlar hardan gəldi? ASCII cədvəlindən - iki nöqtənin nömrəsi @ işarəsindən kiçikdir - və nəticədə qrup alınır. Yəni bütün qruplar ASCII cədvəlinə görə alınır (istəsəniz bundan istifadə edə bilərsiniz).
Bununla necə mübarizə aparmaq olar: çizgi işarəsini elə yerdə qoyun ki,
şübhəsiz şəkildə qrup simvolu kimi qəbul edilməsin, məsələn, əvvəlində və ya sonunda
(yəni [-dən sonra və ya ]-dən əvvəl).
Həmçinin çizgi işarəsini ekranlaşdıra bilərsiniz - onda
o mövqeyindən asılı olmayaraq özünü ifadə edəcək. Məsələn, [:-@] əvəzinə
[:\-@] yazın - və artıq qrup olmayacaq, amma
üç simvol olacaq - iki nöqtə, çizgi işarəsi və @ işarəsi.
Nümunə
Aşağıdakı nümunədə axtarış şablonu belədir:
1 rəqəmi, sonra 'a'-dan
'z'-ədək hərf, sonra 2 rəqəmi:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! 1-2 ! !'
Nümunə
Gəlin indi çizgi işarəsini ekranlaşdıraq. Nəticədə
axtarış şablonu belədir: 1 rəqəmi, sonra
'a' hərfi, ya da çizgi işarəsi, ya da 'z' hərfi,
sonra 2 rəqəmi:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! 1c2 !'
Nümunə
Sadəcə çizgi işarəsini yerini dəyişə bilərsiniz, onu ekranlaşdırmadan:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! 1c2 !'
Nümunə
Aşağıdakı nümunədə axtarış şablonu belədir:
birinci simvol - kiçik hərflər və ya
çizgi işarəsi '-', sonra iki 'x' hərfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! Axx ! @xx'
Nümunə
Aşağıdakı nümunədə axtarış şablonu belədir:
birinci simvol - kiçik, böyük
hərflər və ya çizgi işarəsi '-', sonra iki 'x' hərfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! ! @xx'
Nümunə
Çizgi işarəsini iki qrup arasında yerləşdirə bilərsiniz - orada o, şübhəsiz ki, başqa bir qrup yaratmayacaq:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! ! @xx'
Praktiki tapşırıqlar
Bir sətir verilib:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Aşağıdakı şablona uyğun bütün sətirləri tapın:
'x' hərfi, böyük və ya kiçik
hərf və ya çizgi işarəsi, 'z' hərfi.
Bir sətir verilib:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Aşağıdakı şablona uyğun bütün sətirləri tapın:
'x' hərfi, sonra ya dollar işarəsi, ya
çizgi işarəsi və ya plus işarəsi, sonra 'z' hərfi.