Kapërcellimet në shprehjet e rregullta në PHP
Përmbajtja e kapërcellimeve nuk është e disponueshme vetëm në vargun e zëvendësimit, por edhe në vetë shprehjen e rregullt: ne mund të vendosim diçka në një kapërcellim, dhe pastaj të themi direkt në shprehjen e rregullt, se këtu duhet të jetë përmbajtja e atij kapërcellimi.
Përmbajtja e kapërcellimeve është e disponueshme sipas numrave të tyre,
përpara të cilëve ka një vijë të pjerrët të kundërt. Për shembull,
kapërcellimi zero do të jetë i disponueshëm kështu: \0,
kapërcellimi i parë kështu - \1, i dyti
- \2 e kështu me radhë.
Jam i sigurt se të gjitha sa janë shkruar më sipër janë ende mjaft të paqarta për ju. Kjo nuk është për t'u habitur, pasi kapërcellimet janë pjesa më e pakuptueshme e shprehjeve të rregullta. Le t'i kuptojmë me shembuj.
Shembull
Le të kemi këtë varg:
<?php
$str = 'aa bb cd ef';
?>
Le të gjejmë në të të gjitha vendet ku ndodhen dy shkronja të njëjta çfarëdo njëra pas tjetrës. Për të zgjidhur problemin, do të kërkojmë çdo shkronjë, ta vendosim atë në një kapërcellim, dhe pastaj të kontrollojmë nëse simboli tjetër është përmbajtja e atij kapërcellimi:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Si rezultat, në variabël do të shkruhet kjo:
'! ! cd ef'
Shembull
Le të kemi këtë varg:
<?php
$str = 'asxca buzxb csgd';
?>
Le të gjejmë në të të gjitha fjalët, në të cilat shkronja e parë dhe e fundit janë të njëjta. Për të zgjidhur problemin, do të shkruajmë këtë shabllon: shkronjë, pastaj një ose më shumë shkronja të tjera, dhe pastaj të njëjta shkronjë si e para:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Si rezultat, në variabël do të shkruhet kjo:
'! ! csgd'
Shembull
Në vend të \1 mund të shkruhet \g1:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Shembull
Mund të shkruhet gjithashtu \g{1}:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Shembull
Në kllapat kaçurrelë mund të përcaktohen numra negativë. Në këtë rast, kapërcellimet do të numërohen nga fundi:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Detyra praktike
Është dhënë vargu:
<?php
$str = 'aaa bbb ccc xyz';
?>
Gjeni të gjitha nënvargjet, në të cilat ka tre shkronja të njëjta njëra pas tjetrës.
Është dhënë vargu:
<?php
$str = 'a aa aaa abab bbbb';
?>
Gjeni të gjitha nënvargjet, në të cilat ka dy ose më shumë shkronja të njëjta njëra pas tjetrës.
Është dhënë vargu:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Gjeni të gjitha nënvargjet, në të cilat ka dy fjalë të njëjta njëra pas tjetrës.