Nie-bewarende hakies in PHP gereelde uitdrukkings
Hakies () vervul twee funksies -
groepering van karakters en die funksie van 'n sak. En
wat om te doen as ons moet groepeer,
maar nie in die sak plaas nie?
Vir die oplossing van so 'n probleem is spesiale
nie-bewarende hakies (?: )
uitgedink - hulle groepeer, maar plaas nie in die sak nie.
Voorbeeld
In die volgende voorbeeld het ons die eerste hakies nodig vir groepering, en die tweede - vir die sak. Maar, beide hakies bewaar data in die sak:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
As gevolg sal die volgende in ons sakke wees:
<?php
var_dump($res[0]); // sal 'abab123' uitvoer
var_dump($res[1]); // sal 'ab' uitvoer
var_dump($res[2]); // sal '123' uitvoer
?>
Voorbeeld
Laat ons dit so maak dat die eerste paar hakies slegs groepeer, maar nie in die sak plaas nie:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
As gevolg sal ons nommer in die eerste sak wees:
<?php
var_dump($res[1]); // sal '123' uitvoer
?>
Praktiese take
Gegee substringe, verdeel in twee dele
deur 'n willekeurige aantal pare $@:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Vind elk van sulke substringe en vir elke gevonde substring plaas in die eerste sak wat voor die skeier staan, en in die tweede sak - wat na die skeier staan.