⊗ppPmRgGL 229 of 447 menu

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

Регуларните изрази по default се алчни. Ова значи дека тие зафаќаат максимално можен број на знаци.

Ајде да разгледаме на пример. Нека имаме вакава низа:

<?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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј