EisFuX: /u und Geschwindigkeit

Beitrag lesen

(Hallo|Hi(ho)|Tag) MudGuard,

Und weil wir gerade bei schneller sind: Am schnellsten ist wohl /[\x0-\xff]/,

Ganz so schnell war es dann doch nicht. Ich hab mich schon gewundert ob der großen Unterschiede. Mir ist wohl ein "x"
beim RegEx-Zusammenbasteln abhanden gekommen. Also wurde nur nach "[\x0-\ff]" und nicht nach "[\x0-\xff]" gesucht ...
Hier mal aktualisierte Zeiten:

1551 ms -- for /./s
1773 ms -- for /[\x0-\xff]/
2084 ms -- for /[\x0-\x{10ffff}]/u
3001 ms -- for /(.|\n)/
2123 ms -- for /(?:.|\n)/

Man sieht immer noch deutlich, dass der Punkt alleine am schnellsten ist. Die UTF-benutzende Zeichenklasse ist aber
immer noch schneller als die Konstruktion mit den runden Klammern und liegt mit dem "noncapturing subpattern" etwa
gleichauf.

Das ist aber auch was anderes (zumindest in Perl, inwieweit PHP mit Unicode umgehen kann, weiß ich nicht).

Serienmäßig hat die Version 5.2.x mit Unicode nicht viel am Hut. Die PCRE-Befehle können aber (je nach Version) mit
UTF-8 umgehen, wenn der entsprechende Modifikator "/u" gesetzt wurde.

Unicode kennt Zeichen jenseits von \xff - die mit (?:.|[\r\n]) gematcht werden, mit Deinem Konstrukt aber nicht.

Allerdings war im OP auch nicht explizit die Rede von Unicode, und für die gestellte Aufgabe
("fange alles zwischen <body> und </body>") und in UTF-8 kodiertes HTML sollte es trotzdem ausreichen.

MffG
EisFuX