PHP регуляр ифодаларда гижин ичидаги дефис
Дефис - [] ичида ҳам maxsus символ
(аммо ташқарида - эмас). Агар сизга дефис ўзининг
символи sifatida керак бўлса - уни _гуруҳ бўлиб
қолиш имкони бўлмаган_ жойга қўйинг.
Бу нима учун муҳим: сиз ўзингиз сезмай turib
белгилар гуруҳи яратиб қўйишингиз мумкин. Мисол
учун, мана бу - [:-@] - сиз қос инуқта,
дефис ва @ белгисини танлайди, деб ўйлайсиз,
аммо аслида : ва @ ўртасидаги
белгилар гуруҳи ҳосил бўлади. Бу гуруҳга quyidagi
белгилар киради: :, ;, ?,
<, =, >.
Улар қаердан келди? ASCII jadvalidan - қос инуқтанинг рақами @ белгисиникидан кичик - ва гуруҳ ҳосил бўлади. Яъни барча гуруҳлар ASCII таблицаси бўйича ҳосил бўлади (исталганда будан фойдаланиш мумкин).
Бу билан курашиш қандай: дефис белгисини аник
гуруҳ белгиси sifatida қабул қилинмайдиган жойга,
масалан, бошланишида ёки охирида (яъни [
дан кейин ёки ] дан олдин) қўйинг.
Шунингдек, дефисни экранлаш мумкин - у ҳолда у
ўрнига қарамай ўзини ифоблайди. Мисол uchun,
[:-@] ўрнига [:\-@] ёзинг - ва
энди гуруҳ бўлмайди, балки учта белги бўлади -
қос инуқта, дефис ва @ белгиси.
Мисол
Quyidagi misolda qidirуv naqshи шундай:
1 рақам, кейин 'a' дан
'z' гача ҳарф, кейин 2 рақам:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! 1-2 ! !'
Мисол
Келинг энди дефисни экранлаймиз. Натижада
qidirуv naqshи шундай: 1 рақам, кейин
'a' ҳарфи, ёки дефис, ёки 'z'
ҳарфи, кейин 2 рақам:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! ! 1c2 !'
Мисол
Уни экранламасдан, ёлғиз дефисни joyini o'zgartirish мумкин:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! ! 1c2 !'
Мисол
Quyidagi misolda qidirуv naqshи шундай:
биринчи белги - кичик ҳарфлар ёки
дефис '-', кейин иккита 'x' ҳарфи:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! Axx ! @xx'
Мисол
Quyidagi misolda qidirуv naqshи шундай:
биринчи белги - кичик, катта
ҳарфлар ёки дефис '-', кейин иккита
'x' ҳарфи:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! ! ! @xx'
Мисол
Дефисни икки гуруҳ ўртасига жойлаштириш мумкин - у жерда у яна яна бир гуруҳ яратиш имкони йўқ:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Натижада ўзгарувчига quyidagi ёзилади:
'! ! ! @xx'
Амалий машқлар
Берилган сатр:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Quyidagi naqsh бўйича барча сатрларни топинг:
'x' ҳарфи, катта ёки кичик
ҳарф ёки дефис, 'z' ҳарфи.
Берилган сатр:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Quyidagi naqsh бўйича барча сатрларни топинг:
'x' ҳарфи, кейин ёки доллар, ёки
дефис ёки плюс, кейин 'z' ҳарфи.