⊗ppPmRgGL 229 of 447 menu

Ограничавање похлепности у регуларним изразима у PHP

Регуларни изрази су подразумевано похлепни. То значи да они захватају максимални могући број карактера.

Хајде да размотримо на примеру. Претпоставимо да имамо следећи стринг:

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

Претпоставимо да у овом стрингу желимо да нађемо подстринг 'aeeex' према следећем шаблону: слово 'a', затим било који карактер један или више пута, затим слово 'x'.

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

Очекујемо да у промењиву у резултату буде уписан стринг '! zzz x kkk'. Међутим, то није случај - у промењиву се добија стринг '! kkk'.

Ствар је у томе што наш регуларни израз тражи све карактере од слова 'a' до слова 'x'. Али у нашем стрингу постоје два слова 'x'. Због похлепности се дешава да регуларни израз тражи до последњег слова x, тиме захватајући нешто што нисмо очекивали.

Наравно, често је такво понашање оно што нам је потребно. Али конкретно у овом случају желимо да искључимо похлепност и кажемо регуларном изразу да тражи до првог слова x.

Да би ограничили похлепност, потребно је после оператора понављања ставити знак питања:

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

Похлепност се може ограничити код свих оператора понављања, овако: *?, ?? и {}?.

Дат је стринг:

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

Напишите регуларни израз који ће наћи све стрингове на чијим крајевима се налазе слова 'a', и замениће сваки од њих са '!'. Између слова a може бити било који карактер (осим 'a').

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј