PHP'деги регулярдуу жазылыштардагы сактабаган кашалар
Кашалар () эки функцияны аткарат -
белгилерди топтоо жана карман функциясы. Ал
эми эгерде биз топтоо керек болсо, бирок
карманга салбоо керек болсо эмне кылуу керек?
Мындай көйгөйгө чечим катары атайын
сактабаган кашалар (?: )
ойлоп табылган - алар топтойт, бирок карманга салбайт.
Мисал
Төмөндөгү мисалда биринчи кашалар бизге топтоо үчүн керек, ал эми экинчи кашалар - карман үчүн. Бирок, экөө тең кашалар маалыматтарды карманга сактайт:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Натыйжада биздин кармандарда төмөндөгүлөр болот:
<?php
var_dump($res[0]); // 'abab123' чыгарат
var_dump($res[1]); // 'ab' чыгарат
var_dump($res[2]); // '123' чыгарат
?>
Мисал
Биринчи кашалар жөн гана топтошуп, карманга салбашы үчүн кылалы:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Натыйжада биринчи карманда биздин саныбыз болот:
<?php
var_dump($res[1]); // '123' чыгарат
?>
Практикалык тапшырмалар
Эки бөлүккө бөлүнгөн, $@ жуптарынын өзгөчө
саны менен бөлүнгөн кошумча саптар берилген:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Ар бир ушундай кошумча сапты табыңыз жана ар бир табылган кошумча сап үчүн биринчи карманга бөлгүчтүн алдында турган нерсени, ал эми экинчи карманга - бөлгүчтүн артында турган нерсени салыңыз.