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';
?>
Осындай әрбір ішкі жолды тауып, әрбір табылған ішкі жол үшін бірінші карманға бөлгіштен бұрын тұрғанды салыңыз, ал екінші карманға - бөлгіштен кейін тұрғанды салыңыз.