Карманҳо дар ифодаҳои мунтазам дар 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';
?>
Ҳама зерсатрҳоеро пайдо кунед, ки дар онҳо ду калимаи якхелаи пайдарпай мавҷуданд.