PHP Regular Ifodalarda [ ] Ichida Defis
Defis - [ ] ichida [] maxsus belgidir
(tashqarida - emas). Agar sizga defis o'zi kerak bo'lsa - uni
guruh ajratuvchisi sifatida qabul qilinmaydigan joyga
qo'ying.
Bu nima uchun muhim: siz o'zingiz sezmasdan belgilar guruhini
yaratishingiz mumkin. Masalan, [:-@] - siz ikkita nuqta, defis
va @ belgisini tanlayotganingizni o'ylaysiz, lekin aslida
: va @ orasidagi belgilar guruhini olasiz.
Ushbu guruhga quyidagi belgilar kiradi: :, ;, ?,
<, =, >.
Ular qayerdan keladi? ASCII jadvalidan - ikkita nuqta raqami @ belgisidan kichik - va guruh hosil bo'ladi. Ya'ni barcha guruhlar ASCII jadvali bo'yicha hosil bo'ladi (istak bo'lsa, undan foydalanish mumkin).
Bunga qanday qarshi turish kerak: defis belgisini u aniq guruh belgisi
sifatida qabul qilinmaydigan joyga, masalan, boshida yoki oxirida
(ya'ni [ dan keyin yoki ] dan oldin) qo'ying.
Shuningdek, defisni ekranlash mumkin - unda u
qayerda turishidan qat'iy nazar o'zini anglatadi.
Masalan, [:-@] o'rniga [:\-@] yozing -
va endi guruh bo'lmaydi, balki uchta belgi - ikkita nuqta, defis va @ belgisi bo'ladi.
Misol
Quyidagi misolda qidiruv shabloni quyidagicha:
1 raqami, keyin 'a' dan
'z' gacha harf, keyin 2 raqami:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! 1-2 ! !'
Misol
Keling endi defisni ekranlaymiz. Natijada
qidiruv shabloni quyidagicha: 1 raqami, keyin
'a' harfi, yoki defis, yoki 'z' harfi,
keyin 2 raqami:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! ! 1c2 !'
Misol
Shunchaki defisni ekranlamasdan, o'rnini almashtirish mumkin:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! ! 1c2 !'
Misol
Quyidagi misolda qidiruv shabloni quyidagicha:
birinchi belgi - kichik harflar yoki
defis '-', keyin ikkita 'x' harfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! Axx ! @xx'
Misol
Quyidagi misolda qidiruv shabloni quyidagicha:
birinchi belgi - kichik, katta
harflar yoki defis '-', keyin ikkita
'x' harfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! ! ! @xx'
Misol
Defisni ikkita guruh orasiga joylashtirish mumkin - u erda u aniq yana bitta guruh yaratmaydi:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Natijada o'zgaruvchiga quyidagi yoziladi:
'! ! ! @xx'
Amaliy vazifalar
Berilgan satr:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Quyidagi shablon bo‘yicha barcha satrlarni toping:
'x' harfi, katta yoki kichik
harf yoki defis, 'z' harfi.
Berilgan satr:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Quyidagi shablon bo‘yicha barcha satrlarni toping:
'x' harfi, keyin dollar, yoki
defis yoki ortiqcha belgi, keyin 'z' harfi.