PHP-dä düzgün ifadelerde karmanlar
Karmanlaryň mazmuny diňe çalyşma setirinde däl, eýsem düzgün ifadäniň özünde hem elýeterlidir: biz bir zatly karmana goýup, soňra düzgün ifadäniň içinde şu ýerde şol karmanyň mazmuny bolmalydygyny aýdyp bileris.
Karmanlaryň mazmuny olaryň belgileri boýunça elýeterlidir, olaryň öňünde ters süýüm bolýar. Mysal üçin,
nol karman şeýle elýeterli bolar: \0,
birinji karman şeýle - \1, ikinji
- \2 we ş.m.
Men size ýokardakylaryň hemmesiňiz üçin entek düşnüksizdigine ynanýaryn. Bu täsin däl, sebäbi karmanlar düzgün ifadeleriň iň düşnüksiz ýeridir. Geliň mysallar bilen düşüneliň.
Mysal
Bizde şeýle setir bardyr diýeliň:
<?php
$str = 'aa bb cd ef';
?>
Geliň onda bir-birini yzarlaýan iki hili harp bar ýerleriň hemmesini tapalyň. Meseleni çözmek üçin, islendik bir harpy gözläris, ony karmana goýarys, soňra yzarlaýan nyşanyň şol karmanyň mazmuny ýaly bolýandygyny barlarys:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Netijede üýtgeýjä şu ýazylar:
'! ! cd ef'
Mysal
Bizde şeýle setir bardyr diýeliň:
<?php
$str = 'asxca buzxb csgd';
?>
Geliň onda birinji we soňky harplary deň bolan sözleriň hemmesini tapalyň. Çözmek üçin şu şablon ýazaris: harp, soňra ýene bir ýa-da birnäçe harp, soňra birinji harp ýaly bir harp:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Netijede üýtgeýjä şu ýazylar:
'! ! csgd'
Mysal
\1 ýerine \g1 ýazyp bolýar:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Mysal
Şeýle hem \g{1} ýazyp bolýar:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Mysal
Egme eýwanyň içinde ters belgiler görkezip bolýar. Bu ýagdaýda karmanlar ahyryndan sanalýar:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Amaly meseleler
Setir berlen:
<?php
$str = 'aaa bbb ccc xyz';
?>
Bir hatardan yzarlaýan üç deň harp bar bolan ähli aşaky setirleri tapyň.
Setir berlen:
<?php
$str = 'a aa aaa abab bbbb';
?>
Iki ýa-da ondan köp bir hatardan yzarlaýan deň harp bar bolan ähli aşaky setirleri tapyň.
Setir berlen:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Bir hatardan yzarlaýan iki deň söz bar bolan ähli aşaky setirleri tapyň.