⊗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'. З-за прагнасці атрымліваецца, што рэгулярка шукае да самага апошняга ікса, тым самым захопліваючы не тое, што мы чакалі.

Вядома, часта такая паводзіны нам і трэба. Але канкрэтна ў гэтым выпадку мы б хацелі адмяніць прагнасць і сказаць рэгулярцы, каб яна шукала да першага ікса.

Каб абмежаваць прагнасць, трэба пасля аператара паўтарэння паставіць знак пытання:

<?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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць