EisFuX: dot ersetzen; noncapturing subpatterns

Beitrag lesen

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

Die preg-Funktionen von PHP basieren auf PCRE -- einem möglichst kompatiblen Nachbau der RegExp-Funktionalität von Perl. In PHP waren sie früher tatsächlich nicht "Standard", sondern die POSIX-kompatiblen RegExp-Funktionen. Mittlerweile ist das aber genau umgekehrt.

... und, ähmm, ich weiß nicht, ob Sie's schon wussten, aber es gibt da zwei schöne lange Artikel im PHP-Handbuch:
http://de3.php.net/manual/de/reference.pcre.pattern.syntax.php
http://de3.php.net/manual/de/reference.pcre.pattern.modifiers.php
Die sind zwar in Englisch verfasst und nicht besonders übersichtlich, erklären aber alles Wissenswerte und auch die Spezialitäten und Besonderheiten der PCRE.

Und im ersten der beiden Texte steht zur Bedeutung von ".":

match any character except newline (by default)

Woraus man rasiermesserscharf schlussfolgern könnte, wie man einen "matche"-alles-Ausdruck mit der Hilfe des "." zusammenbasteln müsste:
(.|\n)
Das \r kann man weglassen, denn es wird ja laut Anleitung nicht benötigt, und zumindest bei der PCRE-Extension, die beim von mir getestesten PHP 5.2.2 dabei ist, stimmt das auch.

Eine Zeichenklasse [.\n] passt übrigens nicht, denn dazu meint der Text

Dot has no special meaning in a character class.

In Zeichenklassen passt der "." also nur auf gewöhnliche Punkte.

Höchstens [\x0-\xff] wäre noch denkbar. Das verzichtet auf die runden Klammern und funktioniert zumindest mit Nicht-UTF-8-Strings wie gewünscht.

(?:.|\n|\r)
Mensch, das heißt im letzten Teil wohl alles oder chr(10)LF  oder chr(13) CR, aber auch " " leerzeichen?

Jain, es heißt wortwörtlich:
* ein beliebiges Zeichen außer New Line "[^\xa]" oder
* New Line "\xa" oder
* Carriage Return "\xd"

was aber ist das "?:"? Aber wenn das andere auch Perl-Syntax ist, ists doch fein.

AFAIK ist das alles Perl-Syntax.

Das ist ein "noncapturing subpattern", sprich: ein Teil-Suchmuster, dessen Suchergebnis nicht im Treffer-Array von preg_match() oder preg_match_all() auftaucht.

MffG
EisFuX