PHP: Hat preg_match ein Problem mit Text über 255 Zeichen?

Bei einer Auswertung der Apache-Logfiles für www.voelkner.de und www.smdv.de für November und Dezember 2009 bin ich auf ein kleines Problem (oder nennen wir es Phänomen) gestoßen:

Eine Zeile wird eingelesen und anschließend in die einzelnen Bestandteile aufgesplittet – mithilfe von regulärer Ausdrücke und preg_match:

preg_match( ‚/(.*) (.*) (.*) (.*) \[(.*)\] „(.*)“ (.*) (.*) „(.*)“ „(.*)“/i‘, $line, $matches);

So weit – so gut: Das klappt hervorragend, nur leider nicht mehr bei Zeilen, die mehr als ca. 255 Zeichen (ich glaub es waren ca. 260 oder so) enthalten. Nachdem die Suche nach der Ursache bzw. deren Behebung kein Ergebnis hervorbrachte, tat es folgender Workaround:

$line1 = trim( substr( $line, 0, strpos( $line, ‚]‘ ) + 1 ) );
$line2 = trim( substr( $line, strpos( $line, ‚]‘ ) + 1 ) );
preg_match( ‚/(.*) (.*) (.*) (.*) \[(.*)\]/i‘, $line1, $matches1 );
preg_match( ‚/“(.*)“ (.*) (.*) „(.*)“ „(.*)“/i‘, $line2, $matches2 );
unset( $matches[ 0 ] );
unset( $matches[ 0 ] );
$matches = array_merge( $matches1, $matches2 );

Das ist zwar leider etwas langsamer, dafür funktioniert es aber (zuverlässig).

Wisst ihr vielleicht, wieso dies so ist? Bin über Aufklärung dankbar.

Über Markus Zierhut

Life Is What You Make It!
Dieser Beitrag wurde unter PHP abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten zu PHP: Hat preg_match ein Problem mit Text über 255 Zeichen?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.