On Tue, 16 Nov 2004 11:05:06 +0100, Peter <nospam@nospam.invalid>
wrote:
>> preg_match_all("/<com:.+? \/>/",$content,$result);
>> for at lave en lazy match.
>
>Den virker også... men jeg ved ikk hvorfor? hvordan virker ?-tegnet i
>dette tilfælde?
..+ matcher så mange tegn som muligt. Så for:
<foo><bar>
... vil .+ (ved et udtryk i stil med <.+> ) matche det første <, så
langt som muligt (resten af linjen), og så "gå baglæns", indtil det
næste tegn er >. Det vil sige, at "foo><bar" bliver matchet med .+
Ved .+? matches der så kort som muligt, indtil udtrykket stadigvæk er
gyldigt. Så når "foo" er matched, behøves der ikke at matche mere, før
udtrykket er gyldigt.
Altså:
..+ - først matches alle tegn, så matches ét mindre, så matches ét
mindre, etc., indtil udtrykket er gyldigt
..+? - først matches ét tegn, så matches to tegn, så matches tre tegn,
etc., indtil udtrykket er gyldigt.
..* og .*? fungerer på tilsvarende måde, og det samme med øvrige
quantifiers, fx .{3,7}?
Kig på:
http://dk2.php.net/manual/en/reference.pcre.pattern.syntax.php
... og søg efter teksten: By default, the quantifiers are "greedy"
--
- Peter Brodersen