Hi,
Nicht ganz.
/&#([0-9]+);|&#x([0-9a-f]+);/gi
oder/&#(?:([0-9]+)|x([0-9a-f]+));/gi
Ging eher ums Prinzip als um Perfektion, denn sonst wäre ja nur
/&#(?:x([0-9a-f]+)|([0-9]+));/gi
in Frage gekommen - was zu weniger Backtracking führt, wenn die erste Variante nicht zutrifft (das kann bereits nach einem Zeichen festgestellt werden) und wenn ich das richtig sehe, auch dann, wenn das abschließende ; fehlt).
Ich war mir nicht sicher, ob veroderte Klammerausdrücker dann verschiedene Parameter oder denselben befüllen. Ersteres ist der Fall.
Das ist das übliche, die Numerierung (und hier dann die Zuordnung zum Parameter Nummer x) erfolgt ohne Berücksichtigung der Tatsache, ob die capturing Klammer am aktuellen Match beteiligt ist oder nicht, im Regex anhand der öffnenden Klammern von links nach rechts.
Auch bei ^(a+)?(b+)$ werden die bs auch dann im zweiten capture-Parameter stehen, egal ob as vorhanden sind oder nicht.
(in Java java.util.regex.Matcher wären die bs in group(2), die as in group(1) - group(0) ist der gesamte Match; in Perl die as in $1, die bs in $2, ist also ziemlich sprachunabhängig)
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.