Salvestamata sulud PHP regulaaravaldistes
Sulud () täidavad kahte funktsiooni -
sümbolite grupeerimine ja põhi funktsioon. Aga
mida teha, kui me vajame grupeerida,
kuid mitte panna põhja?
Sellise probleemi lahendamiseks on loodud spetsiaalsed
salvestamata sulud (?: )
- nad grupeerivad, kuid ei pane põhja.
Näide
Järgmises näites on esimesed sulud meile vajalikud groupeerimiseks, teised aga põhja. Siiski, mõlemad sulud salvestavad andmed põhja:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Tulemusena on meie põhjas järgmine:
<?php
var_dump($res[0]); // väljastab 'abab123'
var_dump($res[1]); // väljastab 'ab'
var_dump($res[2]); // väljastab '123'
?>
Näide
Teeme nii, et esimene sulgupaar ainult grupeeriks, kuid ei paneks põhja:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Tulemusena on meie esimeses põhjas meie number:
<?php
var_dump($res[1]); // väljastab '123'
?>
Praktilised ülesanded
Antud alamstringid, jagatud kaheks osaks
suvalise arvu paaridega $@:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Leidke iga selline alamstring ja iga leitud alamstringi puhul pange esimesse põhja see, mis on enne eraldajat, teise põhja - see, mis on pärast eraldajat.