Zitat von
Daniel:
Fehler lokalisiert und behoben. Ich habe nur nicht verstanden, was da falsch ist. Kann mit mal einer den Unterschied zwischen den folgenden Zeilen erklären:
Code:
preg_match("/^(Subject:(.*?)(?:\r\n)+?)?(Charset:(.*?)(?:\r\n)+?)?(.*?)$/is", $this->msg, $match);
preg_match("/^(Subject:(.*?)[\r\n]+?)?(Charset:(.*?)[\r\n]+?)?(.*?)$/is", $this->msg, $match);
So ganz versteh ich den auch nicht, aber zunächst einmal ist der Unterschied, dass oben
?:\r\n und unten
[\r\n] steht. Beim unteren steht der Zeilennumbruch also in eckigen Klammern und bildet somit eine Charakterklasse. Was das genau ist,m weiß aich auch nicht, aber eigentlich sollten die beiden Steuerzeichen innerhalb und außerhalb einer Charakterklasse das selbe tun, deswegen denk, ich, dass sie eckigen Klammern nicht notwendig sind.
Es kommt wohl nur auf
?: an. Was das am Anfang einer Klammer bedeutet, wird so erklärt:
Zitat von
PHP-Manual:
For example, if the string "the red king" is matched against
the pattern
the ((red|white) (king|queen))
the captured substrings are "red king", "red", and "king",
and are numbered 1, 2, and 3.
The fact that plain parentheses fulfil two functions is not
always helpful. There are often times when a grouping sub-
pattern is required without a capturing requirement. If an
opening parenthesis is followed by "?:", the subpattern does
not do any capturing, and is not counted when computing the
number of any subsequent capturing subpatterns. For example,
if the string "the white queen" is matched against the
pattern
the ((?:red|white) (king|queen))
the captured substrings are "white queen" and "queen", and
are numbered 1 and 2. The maximum number of captured sub-
strings is 99, and the maximum number of all subpatterns,
both capturing and non-capturing, is 200.
Ich versteh es nicht so ganz genau, aber vielleicht hilft das denjenigen etwas, der das oben angesprochene Problem verstehen will. Und wer noch mehr lesen will:
http://www.php.net/manual/de/pcre.pattern.syntax.php