PHP тұрақты өрнектеріндегі жиындар ішіндегі дефис
Дефис - [] ішінде де арнайы таңба
(ал сыртында - емес). Егер сізге дефис таңба ретінде қажет болса - оны
топ бөлгіш ретінде қабылданбайтын жерге қойыңыз.
Бұл неге маңызды: сіз өзіңіз байқамастан таңбалар тобын жасай аласыз.
Мысалы, осылай - [:-@] - сіз үтір, дефис және @ таңбаларын таңдайды деп ойлайсыз,
бірақ шын мәнінде : пен @ арасындағы таңбалар тобы шығады.
Бұл топқа мынадай таңбалар кіреді: :, ;, ?,
<, =, >.
Олар қайдан шықты? 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' әрпі.