⊗ppPmRgGL 229 of 447 menu

Ograničavanje pohlepe u regularnim izrazima u PHP-u

Regularni izrazi su podrazumevano pohlepni. To znači da hvataju maksimalan mogući broj karaktera.

Hajde da razmotrimo primer. Pretpostavimo da imamo ovakav string:

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

Pretpostavimo da u ovom stringu želimo da pronađemo podstring 'aeeex' koristeći sledeći šablon: slovo 'a', zatim bilo koji karakter jedan ili više puta, zatim slovo 'x'.

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

Očekujemo da će se u promenljivu kao rezultat upisati string '! zzz x kkk'. Međutim, to nije slučaj - u promenljivu se upisuje string '! kkk'.

Stvar je u tome što naš regularni izraz traži sve karaktere od slova 'a' do slova 'x'. Ali u našem stringu se nalaze dva slova 'x'. Zbog pohlepe se dešava da regularni izraz traži do poslednjeg slova x, time hvatajući nešto što nismo očekivali.

Naravno, često je ovo ponašanje upravo ono što nam je potrebno. Ali konkretno u ovom slučaju želimo da poništimo pohlepu i kažemo regularnom izrazu da traži do prvog slova x.

Da bismo ograničili pohlepu, potrebno je da posle operatora ponavljanja stavimo znak pitanja:

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

Pohlepu možemo ograničiti svim operatorima ponavljanja, ovako: *?, ?? i {}?.

Dat je string:

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

Napišite regularni izraz koji će pronaći sve stringove na čijim krajevima se nalaze slova 'a', i zameniti svaki od njih sa '!'. Između slova a može biti bilo koji karakter (osim 'a').

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij