⊗ppPmRgGL 229 of 447 menu

A kapzsiság korlátozása reguláris kifejezésekben PHP-ben

A reguláris kifejezések alapértelmezetten kapzsiak. Ez azt jelenti, hogy a lehető legtöbb karaktert próbálják megragadni.

Nézzünk egy példát. Tegyük fel, hogy van egy ilyen karakterláncunk:

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

Tegyük fel, hogy ebben a karakterláncban meg szeretnénk találni a 'aeeex' részt a következő minta alapján: az 'a' betű, majd bármely karakter egy vagy többször, majd az 'x' betű.

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

Arra számítanánk, hogy az eredményül kapott változó a '! zzz x kkk' karakterlánc lesz. Azonban ez nem így van - a változóba a '! kkk' karakterlánc kerül.

Az egész azon múlik, hogy a reguláris kifejezésünk minden karaktert keres az 'a' betűtől az 'x' betűig. De a karakterláncunkban két 'x' betű van. A kapzsiság miatt az történik, hogy a regex a legutolsó x-ig keres, ezzel megragadva nem azt, amire számítottunk.

Természetesen gyakran pontosan ez a viselkedés a szükséges. De ebben a konkrét esetben szeretnénk megszüntetni a kapzsiságot, és azt mondani a regexnek, hogy az első x-ig keressen.

A kapzsiság korlátozásához az ismétlési operátor után kérdőjelet kell tenni:

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

A kapzsiság minden ismétlési operátornál korlátozható, így: *?, ?? és {}?.

Adott egy karakterlánc:

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

Írjon reguláris kifejezést, amely meg fogja találni az összes olyan karakterláncot, amelynek szélein 'a' betűk állnak, és mindegyiket lecseréli '!'-ra. Az a betűk között bármilyen karakter lehet (kivéve 'a').

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás