Maxim: Unglaublich langsame Regexp - Optimierungsmöglichkeiten?

Hallo Zusammen,

folgender Regexp, den ich mir mühesam zusammengestellt habe, verlangsamt mein Script um den Faktor 10. Die regexp rufe ich in einer Schleife auf, ca. 20 mal. Aber das nur so als Hintergrundinformation. Kann mir jemand helfen, das zu verbesser?:

$match = eregi("\[code(=(^\[]*))?\\[/code\]", $text, $regs);

Vielen Dank schonmal!
Maxim

  1. Huhu Maxim,

    folgender Regexp, den ich mir mühesam zusammengestellt habe, verlangsamt mein Script um den Faktor 10. Die regexp rufe ich in einer Schleife auf, ca. 20 mal. Aber das nur so als Hintergrundinformation. Kann mir jemand helfen, das zu verbesser?:

    $match = eregi("\[code(=(^\[]*))?\\[/code\]", $text, $regs);

    Benutze preg_match().
    Wenn Du einfache Anführungen verwendest musst Du nicht sämtliche backslashes mit backslash maskieren.

    Mmmmh, eigentlich hat Dein Suchmuster durch das '[code' ja einen grossen festen Bestandtteil, das sollte nicht langsam sein.
    Was ist mit Deiner Schleife (20-mal), was macht die und warum?
    Welche Grössenordnung (ungefähr) hat $text?

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Huhu Lulu,

      Benutze preg_match().
      Wenn Du einfache Anführungen verwendest musst Du nicht sämtliche backslashes mit backslash maskieren.

      Das habe ich jetzt gemacht:
      $match = preg_match("/[code(=([^\[]*))?]([^\[]*)[/code]/i", $text, $regs);

      Ist das schon optimal oder kann man da noch was rausholen? Bzw. ist das Suchmuster überhaupt korrekt? Ich bin irgendwie zu doof Regexps zu verstehen :(

      Mmmmh, eigentlich hat Dein Suchmuster durch das '[code' ja einen grossen festen Bestandtteil, das sollte nicht langsam sein.
      Was ist mit Deiner Schleife (20-mal), was macht die und warum?

      Die Schleife geht Forenbeiträge durch. Auf einer Seite sind's maximal 20 Stück.

      Welche Grössenordnung (ungefähr) hat $text?

      ca. 2000-4000 Bytes

      Vielen Dank und Grüsse, Maxim

      1. Bzw. ist das Suchmuster überhaupt korrekt? Ich bin irgendwie zu doof Regexps zu verstehen :(

        Dazu sollte ich vielleicht noch erklären, was die RegExp überhaupt machen muss:

        Ich möchte alles das treffen, dass folgendermaßen aufgebaut ist:

        1. "..."
        2. "[code=javascript]...[/code]"

        Der Text zwischen den "tags" kann newlines enthalten.
        Für jemand, der sich mit Regexps auskennt ganz einfach, oder?

        Und noch ein Nachtrag: der eregi-Ausdruck, den ich am Anfang verwendet habe war NICHT korrekt und lieferte für einen Text, der nur einen Treffer liefern sollte > 400 Treffer. Deswegen war das so arschlahm ;)
        Maxim