Geschwindigkeit von Reguläre Ausdrücke
Thorsten Steffen
- php
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
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