On Mon, 04 Oct 2004 01:34:50 +0200, Lasse Hedegaard <laxxe@nospam.dk>
wrote:
>$string = preg_replace('_^[a-z]+_e','strtoupper("$0")',$string);
>
>Som altid er du en guttermand, Peter
>
>Regular expressions bliver aldrig min kop te, men hvis du har tid - må
>du meget gerne forklare hvad din magiske linie gør - så kan jeg da
>forhåbentlig blive lidt klogere...
Første argument er hvad, der skal matches.
Første argument er: _^[a-z]+_e
Selve udtrykket er: ^[a-z]+
Dvs. fra starten af strengen skal der matches ét til flere tegn blandt
a-z.
Til udtrykket bruger vi e-flaget:
http://dk.php.net/manual/en/reference.pcre.pattern.modifiers.php
Det betyder, at vi eval()'er andet argument. På den måde kan vi køre
en funktion på det matchede.
Andet argument, strtoupper("$0") skulle være til at forstå. $0 er alt,
der bliver matchet i stringen. Det er velkendt fra når man sætter
parenteser, og matcher dele af udtrykket.
En caveat er, at udtrykket ikke matcher store bogstaver, men det er
let at få den til at medtage det. Det kunne være relevant, hvis
string'en kan være "abCd123abc" - her vil kun ab blive matchet i
øjeblikket. Enten kan vi prøve at matche [a-zA-Z]+ (eller tilføje
i-flaget for at gøre søgningen case-insensitive), eller måske endnu
bedre, [^0-9]+, hvis vi bare vil matche så langt så muligt, indtil vi
evt. møder et tal.
--
- Peter Brodersen
Ugens sprogtip: så længe (og ikke sålænge)