PHP регулярдык ifadelerinde [ ] ичиндеги дефис
Дефис - да [] ичинде атайын символ
(бирок сыртында - эмес). Эгерде сизге дефис өзү символ катары керек болсо - анда аны топ бөлгүч катары кабыл алынбай турган жерге коюңуз.
Бул эмне үчүн маанилүү: сиз өзүңүз байкабай, символдор тобун түзө аласыз. Мисалы,
мындай - [:-@] - сиз үтүр, дефис жана @ белгисин тандап жатасыз деп ойлошот,
ал эми чындыгында : менен @ ортосундагы символдор тобу пайда болот. Бул топко төмөнкү символдор кирет: :, ;, ?,
<, =, >.
Алар кайдан келип чыкты? ASCII таблицасынан - үтүрдүн номери @ белгисиникинен кичине - жана натыйжада топ пайда болот. Башкача айтканда, бардык топтор ASCII таблицасы боюнча пайда болот (каалоо менен, муну пайдаланууга болот).
Муну менен кантип күрөшүү керек: дефис символун так эле символ тобу катары кабыл алынбай турган жерге, мисалы, башында же аягында
(башкача айтканда, [ кийин же ] алдында) коюңуз.
Дефсти экраңдоого да болот - анда
ал кайсы ордунда турбасын, өзүн өзү билдирет.
Мисалы, [:-@] ордуна
[:\-@] деп жазыңыз - жана андан кийин эч кандай топ болбойт, ал эми
үч символ болот - үтүр, дефис жана @ белгиси.
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
сан 1, андан кийин 'a' дан
'z' га чейинки тамга, андан кийин 2 саны:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! 1-2 ! !'
Мисал
Келгиле, эми дефсти экраңдайлы. Натыйжада
издөө үлгүсү төмөнкүдөй: сан 1, андан кийин
'a' тамгасы, же дефис, же 'z' тамгасы,
андан кийин 2 саны:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! 1c2 !'
Мисал
Дефсти экраңдобой эле, жөн гана ордун өзгөртүүгө болот:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! 1c2 !'
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
биринчи символ - бул кичине тамгалар же
дефис '-', андан кийин эки 'x' тамгасы:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! Axx ! @xx'
Мисал
Төмөнкү мисалда издөө үлгүсү төмөнкүдөй:
биринчи символ - бул кичине, чоң
тамгалар же дефис '-', андан кийин эки
'x' тамгасы:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! ! @xx'
Мисал
Дефсти эки топтун ортосуна коюуга болот - ал жерде ал дагы бир топту жасабайт:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Натыйжада өзгөрмөгө төмөнкү жазылат:
'! ! ! @xx'
Практикалык тапшырмалар
Төмөнкү сап берилген:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Төмөнкү үлгү боюнча бардык саптарды табыңыз:
'x' тамгасы, чоң же кичине
тамга же дефис, 'z' тамгасы.
Төмөнкү сап берилген:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Төмөнкү үлгү боюнча бардык саптарды табыңыз:
'x' тамгасы, андан кийин же доллар, же
дефис же кошуу белгиси, андан кийин 'z' тамгасы.