PHP, MySQL, CSS, XHTML, JavaScript
27. Aug. 2007
PHP / MySQL
Jeg oppdaget, over IRC, en temmelig genial funksjon i regulære uttrykk som du kan bruke i store uttrykk som trenger bedre grupperinger i preg_match_all(). Det er en funksjon som kan brukes til å navngi nøkkelverdiene til resultatene som du får i arrayen du får ut av preg_match_all(). Så om du har et stort uttrykk hvor det kan være kjedelig å bruke kun nummeriske indekser på arrayen, kan du bruke «Named Capture Grouping» i RegExp til å holde styr på hva det er som blir hentet.
Metoden jeg viser her vil kun fungere i Python, PCRE og PHP i følge regular-expressions.info. Det ligger ikke mer magi bak det enn bokstaven P og noen andre små tegn.
De fleste av oss vet hvordan vi grupperer resultat i regexp, vi bruker paranteser. Dette er et eksempel på hvordan du kan hente ut informasjon ved gruppering:
Om du har mange resultat er det ikke tvil om at kun numeriske indekser kan bli forvirrende når du skal skille de fra hverandre. Derfor har vi «Named Capture Grouping» som kan hjelpe deg i å holde orden på styret.
Små endringer i uttrykket til dette:
Så har vi plutselig kontroll på hva vi henter ut. Da ser eksemplet over slik ut:
Et godt tips til kontroll i komplekse uttrykk.
Videre lesing til andre systemer kan gjøres på
Noe jeg glemte å nevne som gjør det enda mer genialt er muligheten for bakover referanse med named capture fremfor numeriske verdier. I regulære uttrykk kan man, som mange vet, bruke \\TALL til å referere til grupperinger i uttrykket, men også dette kan bli vanskelig å holde styr på når kompleksiteten øker.
Derfor kan man bruke named capture grouping til å holde styr på dette også. Det er til og med samme bokstav som blir brukt.
Her kommer et eksempel:
Du bruker med andre ord (?P=name) når du har lagd grupperingen.
Innlegget ble postet 27.08.07 17:06 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.
Veldig fint, takk. Er det noe nevnverdig tregere i noen grad?
Nevo Script skrev dette 28 August, 2007 16:02 - Sitér
Nei det er ikke noe forskjell i kjøretid, etter som jeg har testet ut.
Mikael Brevik skrev dette 28 August, 2007 16:38 - Sitér