⊗ppPmRgGL 229 of 447 menu

Obmedzenie chamtivosti v regulárnych výrazoch v PHP

Regulárne výrazy sú predvolene chamtivé. To znamená, že zachytávajú maximálne možný počet znakov.

Poďme si to rozobrať na príklade. Nech máme takýto reťazec:

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

Nech chceme v tomto reťazci nájsť podreťazec 'aeeex' podľa nasledujúceho vzoru: písmeno 'a', potom ľubovoľný znak jeden alebo viac krát, potom písmeno 'x'.

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

Očakávame, že do premennej sa ako výsledok zapíše reťazec '! zzz x kkk'. Avšak, nie je to tak - do premennej sa dostane reťazec '! kkk'.

Celé je to o tom, že náš regulárny výraz hľadá všetky znaky od písmena 'a' až po písmeno 'x'. Ale v našom reťazci sú dve písmená 'x'. Kvôli chamtivosti sa stáva, že regulárny výraz hľadá až po posledné písmeno x, čím zachytáva nie to, čo sme očakávali.

Samozrejme, často je toto správanie práve to, čo potrebujeme. Ale konkrétne v tomto prípade by sme chceli zrušiť chamtivosť a povedať regulárnemu výrazu, aby hľadal len po prvé písmeno x.

Na obmedzenie chamtivosti je potrebné po operátore opakovania umiestniť znak otáznika:

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

Chamtivosť možno obmedziť všetkým operátorom opakovania, takto: *?, ?? a {}?.

Daný reťazec:

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

Napíšte regulárny výraz, ktorý nájde všetky reťazce na whose okrajoch sú písmená 'a', a nahradí každý z nich na '!'. Medzi písmenami a môže byť ľubovoľný znak (okrem 'a').

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť