⊗ppPmRgNPB 252 of 447 menu

Parentesi non catturanti nelle espressioni regolari di PHP

Le parentesi () svolgono due funzioni: raggruppare i caratteri e la funzione di cattura (capturing group). Ma cosa fare se abbiamo bisogno di raggruppare, senza però catturare nel gruppo? Per risolvere questo problema sono state create delle speciali parentesi non catturanti (?: ) - che raggruppano, ma non catturano nel gruppo.

Esempio

Nel seguente esempio, le prime parentesi ci servono per il raggruppamento, mentre le seconde per la cattura. Tuttavia, entrambe le parentesi catturano i dati nel gruppo:

<?php $str = 'abab123'; $reg = '#(ab)+([1-9]+)#'; preg_match_all($reg, $str, $res); ?>

Di conseguenza, nei nostri gruppi di cattura avremo quanto segue:

<?php var_dump($res[0]); // visualizzerà 'abab123' var_dump($res[1]); // visualizzerà 'ab' var_dump($res[2]); // visualizzerà '123' ?>

Esempio

Modifichiamo in modo che la prima coppia di parentesi solo raggruppi, senza catturare nel gruppo:

<?php $str = 'abab123'; $reg = '#(?:ab)+([1-9]+)#'; preg_match_all($reg, $str, $res); ?>

Di conseguenza, nel primo gruppo di cattura ci sarà il nostro numero:

<?php var_dump($res[1]); // visualizzerà '123' ?>

Compiti pratici

Sono date delle sottostringhe, divise in due parti da un numero arbitrario di coppie $@:

<?php $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb'; ?>

Trova ognuna di queste sottostringhe e per ogni sottostringa trovata, metti nel primo gruppo di cattura ciò che sta prima del separatore, e nel secondo gruppo di cattura - ciò che sta dopo il separatore.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta