⊗ppPmRgGL 229 of 447 menu

Begränsning av girighet i reguljära uttryck i PHP

Reguljära uttryck är som standard giriga. Det betyder att de fångar maximalt möjligt antal tecken.

Låt oss titta på ett exempel. Anta att vi har följande sträng:

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

Anta att vi i denna sträng vill hitta delsträngen 'aeeex' enligt följande mönster: bokstaven 'a', sedan valfritt tecken en eller flera gånger, sedan bokstaven 'x'.

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

Vi förväntar oss att variabeln som ett resultat kommer att innehålla strängen '! zzz x kkk'. Men så är det inte - variabeln innehåller strängen '! kkk'.

Anledningen är att vårt reguljära uttryck söker efter alla tecken från bokstaven 'a' till bokstaven 'x'. Men i vår sträng finns två bokstäver 'x'. På grund av girigheten händer det så att det reguljära uttrycket söker fram till den sista 'x':en, och därmed fångar inte det vi förväntade oss.

Naturligtvis är detta beteende oftast vad vi behöver. Men just i det här fallet skulle vi vilja avbryta girigheten och säga åt det reguljära uttrycket att det ska söka fram till den första 'x':en.

För att begränsa girigheten ska du sätta ett frågetecken efter repetitionsoperatorn:

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

Girighet kan begränsas för alla repetitionsoperatorer, så här: *?, ?? och {}?.

Given är en sträng:

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

Skriv ett reguljärt uttryck som hittar alla strängar som har bokstaven 'a' i båda ändar, och ersätter var och en av dem med '!'. Mellan bokstäverna a kan finnas vilket tecken som helst (förutom 'a').

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa