PHP-дегі реттік өрнектердегі кармандар
Кармандардың мазмұны тек ауыстыру жолында ғана емес, сонымен қатар реттік өрнектің өзінде де қолжетімді: біз бір нәрсені карманға салып, содан кейін реттік өрнекте дәл осы карманның мазмұны болуы керек деп айта аламыз.
Кармандардың мазмұны олардың нөмірлері бойынша қолжетімді,
олардың алдында кері сызық тұрады. Мысалы,
нөлдік карман мына түрде қолжетімді болады: \0,
бірінші карман мына түрде - \1, екінші
- \2 және т.б.
Сіз үшін жоғарыда жазылғандардың бәрі әлі де түсініксіз деп сенемін. Бұл таңқаларлық емес, өйткені кармандар - реттік өрнектердің ең түсініксіз жері. Мысалдар арқылы қарастырайық.
Мысал
Бізде мынайы жол бар делік:
<?php
$str = 'aa bb cd ef';
?>
Онда қатар тұрған екі бірдей әріп тұрған барлық орындарды табайық. Есепті шешу үшін кез келген әріпті іздейміз, оны карманға саламыз, содан кейін келесі таңба сол карманның мазмұны ма, соны тексереміз:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Нәтижесінде айнымалыға мыналар жазылады:
'! ! cd ef'
Мысал
Бізде мынайы жол бар делік:
<?php
$str = 'asxca buzxb csgd';
?>
Онда бірінші және соңғы әріптері бірдей барлық сөздерді табайық. Есепті шешу үшін мына үлгіні жазамыз: әріп, содан кейін тағы бір немесе одан да көп әріп, содан кейін бірінші әріптей әріп:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Нәтижесінде айнымалыға мыналар жазылады:
'! ! csgd'
Мысал
\1 орнына \g1 деп жазуға болады:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Мысал
\g{1} деп те жазуға болады:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Мысал
Бұйра жақшаларда теріс сандарды көрсетуге болады. Бұл жағдайда кармандар соңынан санала басталады:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Практикалық есептер
Мына жол берілген:
<?php
$str = 'aaa bbb ccc xyz';
?>
Қатарында үш бірдей әріп тұрған барлық ішкі жолдарды табыңыз.
Мына жол берілген:
<?php
$str = 'a aa aaa abab bbbb';
?>
Қатарында екі немесе одан да көп бірдей әріп тұрған барлық ішкі жолдарды табыңыз.
Мына жол берілген:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Қатарында екі бірдей сөз тұрған барлық ішкі жолдарды табыңыз.