⊗ppPmRgGL 229 of 447 menu

Limitare la golosità nelle espressioni regolari in PHP

Le espressioni regolari sono golose per impostazione predefinita. Ciò significa che catturano il numero massimo possibile di caratteri.

Analizziamo con un esempio. Supponiamo di avere questa stringa:

<?php $str = 'aeeex zzz x kkk'; ?>

Supponiamo di voler trovare in questa stringa la sottostringa 'aeeex' utilizzando il seguente schema: lettera 'a', poi qualsiasi carattere una o più volte, poi lettera 'x'.

<?php $res = preg_replace('#a.+x#', '!', $str); ?>

Ci aspettiamo che nella variabile come risultato venga memorizzata la stringa '! zzz x kkk'. Tuttavia, non è così - nella variabile finisce la stringa '! kkk'.

Il punto è che la nostra regex cerca tutti i caratteri dalla lettera 'a' alla lettera 'x'. Ma nella nostra stringa ci sono due lettere 'x'. A causa della golosità, la regex cerca fino all'ultima 'x', catturando così non ciò che ci aspettavamo.

Certo, spesso è proprio questo comportamento che ci serve. Ma in questo caso specifico vorremmo disabilitare la golosità e dire alla regex di cercare solo fino alla prima 'x'.

Per limitare la golosità, è necessario mettere un punto interrogativo dopo l'operatore di ripetizione:

<?php $res = preg_replace('#a.+?x#', '!', $str); ?>

La golosità può essere limitata per tutti gli operatori di ripetizione, in questo modo: *?, ?? e {}?.

Data la stringa:

<?php $str = 'aba accca azzza wwwwa'; ?>

Scrivi un'espressione regolare che trovi tutte le stringhe ai cui estremi ci sono le lettere 'a', e sostituisca ciascuna di esse con '!'. Tra le lettere a può esserci qualsiasi carattere (tranne 'a').

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