⊗ppPmRgGL 229 of 447 menu

Limitarea lăcomiei în expresiile regulate în PHP

Expresiile regulate sunt implicit lăcomace. Aceasta înseamnă că ele captează numărul maxim posibil de caractere.

Să analizăm un exemplu. Să presupunem că avem următorul șir:

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

Să presupunem că în acest șir vrem să găsim subșirul 'aeeex' după următorul model: litera 'a', apoi orice caracter unul sau mai multe ori, apoi litera 'x'.

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

Ne așteptăm ca în variabilă în rezultat să se scrie șirul '! zzz x kkk'. Cu toate acestea, nu este așa - în variabilă ajunge șirul '! kkk'.

Totul se datorează faptului că expresia noastră regulată caută toate caracterele de la litera 'a' până la litera 'x'. Dar în șirul nostru sunt două litere 'x'. Din cauza lăcomiei, se dovedește că expresia regulată caută până la ultimul x, captând astfel ceea ce nu ne așteptam.

Desigur, adesea acest comportament este exact ceea ce ne dorim. Dar tocmai în acest caz am dori să anulăm lăcomia și să spunem expresiei regulate să caute până la primul x.

Pentru a limita lăcomia, trebuie să puneți semnul întrebării după operatorul de repetare:

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

Lăcomia poate fi limitată tuturor operatorilor de repetare, astfel: *?, ?? și {}?.

Este dat șirul:

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

Scrieți o expresie regulată care va găsi toate șirurile la ale căror margini sunt literele 'a', și le va înlocui pe fiecare cu '!'. Între literele a poate fi orice caracter (cu excepția 'a').

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge