Volker Nebelung: Performance-Probleme bei Regex

Aloha 'oe,

ich habe für ein Skript als Input eine Textdatei, die durchaus bis 200 MB groß sein kann. Diese Datei soll jetzt zeilenweise auf das Vorhandensein von Kleinbuchstaben, Großbuchstaben, Ziffern und sonstige Zeichen untersucht werden.
Das mache ich mit einer Schleife über alle Zeilen der Datei bisher so:

  
if (preg_match("/[a-zäöüß]+/", $inputline)) {} else {}  
if (preg_match("/[A-ZÄÖÜ]+/", $inputline)) {} else {}  
if (preg_match("/[0-9]+/", $inputline)) {} else {}  
if (preg_match("/[^a-zäüößA-ZÄÖÜ0-9]+/", $inputline)) {} else {}  

Funktioniert natürlich, allerdings zerren die ganzen regulären Ausrücke bei großen Dateien ziemlich an der Performance. Gibt es mit PHP 5 irgendeinen eleganteren/schnelleren Weg, die Überprüfungen durchzuführen?

Gruß

Volker

  1. [code lang=php]
    if (preg_match("/[a-zäöüß]+/", $inputline)) {

    ..

    if (preg_match("/[A-ZÄÖÜ]+/", $inputline)) {

    ..

    if (preg_match("/[0-9]+/", $inputline)) {

    ..

    if (preg_match("/[^a-zäüößA-ZÄÖÜ0-9]+/", $inputline)) {

    Funktioniert natürlich, allerdings zerren die ganzen regulären Ausrücke bei großen Dateien ziemlich an der Performance. Gibt es mit PHP 5 irgendeinen eleganteren/schnelleren Weg, die Überprüfungen durchzuführen?

    Ein String wie "aA9" wird bei dir viermal behandelt. Das ist reichlich Redundanz. Ob diese Redundanz notwendig ist, verschweigst du allerdings.
    Das ganze sieht nach ziemlichem Nonsense aus.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische