⊗ppPmRgGL 229 of 447 menu

Begrensning av grådighet i regulære uttrykk i PHP

Regulære uttrykk er som standard grådige. Dette betyr at de fanger maksimalt mulig antall tegn.

La oss se på et eksempel. Anta at vi har følgende streng:

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

Anta at vi i denne strengen ønsker å finne delstrengen 'aeeex' ved å bruke følgende mønster: bokstaven 'a', deretter hvilket som helst tegn en eller flere ganger, deretter bokstaven 'x'.

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

Vi forventer at variabelen som et resultat vil inneholde strengen '! zzz x kkk'. Imidlertid er ikke dette tilfellet - variabelen får strengen '! kkk'.

Hele poenget er at vårt regulære uttrykk søker etter alle tegn fra bokstaven 'a' til bokstaven 'x'. Men i strengen vår er det to bokstaver 'x'. På grunn av grådigheten skjer det at det regulære uttrykket søker helt til den siste 'x'en, og fanger dermed noe annet enn det vi forventet.

Selvfølgelig er denne oppførselen ofte det vi ønsker. Men akkurat i dette tilfellet ønsket vi å oppheve grådigheten og fortelle det regulære uttrykket at det skal søke til den første 'x'en.

For å begrense grådigheten må du sette et spørsmålstegn etter repetisjonsoperatoren:

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

Grådighet kan begrenses for alle repetisjonsoperatorer, slik: *?, ?? og {}?.

Gitt en streng:

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

Skriv et regulært uttrykk som finner alle strenger som har bokstaven 'a' i begge ender, og erstatter hver av dem med '!'. Mellom bokstavene a kan det være hvilket som helst tegn (unntatt 'a').

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis