Thorsten Steffen: Geschwindigkeit von Reguläre Ausdrücke

hio,

spiel gerade mit Regulären Ausdrücken rum, wenn man mal ein wenig verstanden hat, können die Dinger auch Laune machen ;).
Im ernst, soll wirklich was brauchbares dabei herauskommen, im Endeffekt will ich logfiles nach gewissen Kriterien analysieren.

Bin gerade dabei in PHP ein Ausdruck für eine gültige URL zu definieren, als Vorlage dient dabei CheckRFC.pm (ist zwar in Perl, aber geht schon ;) aus dem SELFHTML-Forum und RFC 2396.
In CheckRFC.pm sind die einzelnen Bestandteile sehr strukturiert definiert.
Nun zu den Fragen, a.) was ist die genaue bedeutung von (?:[a-z]), hab zu dem ?: nichts im PHP-Manual finden können, obwohl das sehr schön funktioniert. Ist das ?: dann nicht wirklich ein subpattern oder wie?
b.) ist die Struktur, also der feine Aufbau der einzelnen Bestandteile nicht zu sehr Performance-lastig? mal nen schnellen Test auf 1000 Zeichenkette hatte ich Geschwindigkeitsunterschiede von ca 30-40%, ist es dann vielleicht nicht Praxistauglicher nicht

$lowAlpha = "(?:[a-z])";
$upperAlpha = "(?:[A-Z])";
$alpha = "(?:$lowAlpha|$upperAlpha)";

sondern

$alpha = "(?:[a-zA-z])";

zu schreiben? auch wenn die Struktur etwas leidet.

gl & hf

Thorsten

  1. Hallo Thorsten,

    Nun zu den Fragen, a.) was ist die genaue
    bedeutung von (?:[a-z]), hab zu dem ?: nichts
    im PHP-Manual finden können, obwohl das sehr
    schön funktioniert. Ist das ?: dann nicht
    wirklich ein subpattern oder wie?

    ?: bewirkt, dass der geklammerte Ausdruck in
    keiner Backreference (\1, \2, ... bzw. $1, $2,
    ...) gespeichert wird.

    b.) ist die Struktur, also der feine Aufbau
    der einzelnen Bestandteile nicht zu sehr
    Performance-lastig? mal nen schnellen Test auf
    1000 Zeichenkette hatte ich
    Geschwindigkeitsunterschiede von ca 30-40%,
    ist es dann vielleicht nicht Praxistauglicher
    nicht

    $lowAlpha = "(?:[a-z])";
    $upperAlpha = "(?:[A-Z])";
    $alpha = "(?:$lowAlpha|$upperAlpha)";

    sondern

    $alpha = "(?:[a-zA-z])";

    zu schreiben? auch wenn die Struktur etwas
    leidet.

    Wenn du wirklich auf Performance anlegst, ja. Aber
    CheckRFC.pm wird eigentlich nur beim Posten
    genutzt, da ist die Performance nicht sooo
    wichtig.

    Gruesse,
     CK