Sven Wagener: Reguläre Ausdrücke

Guten Tag noch einmal,

folgendes Problem:

ich filtere per

preg_match_all("|<title>(.*)</title>|U",$string,$matches, PREG_PATTERN_ORDER);

den Titel aus einem HTML Dokument heraus. Dies funktioniert aber nur, solange

1. der tag <title> klein geschrieben wurde und
2. der <title> als auch der </title> Tag in einer Zeile stehen.

Wie bekomme ich den Titel auch wenn der Titel gross geschrieben ist und wenn das Öffnungs und das schliessen Tag nicht in einer Zeile stehen?

Wer kann mir weiter helfen?

MfG,

Sven Wagener.
http://www.dokuwelt.de

  1. Hi,

    ich würde das nicht mit preg_match_all() machen, sondern mit eregi()

    versuchs mal so:

    if(eregi("<title>(.*\n)</title>", $string, $regs))
    {
    $title = $regs[0];
    }

    eregi ist es egal, ob groß oder klein (findet auch <TItlE>)
    und (.*) findet alles außer newline, daher noch zusätzlich das \n.

    Christian

  2. Hi,

    preg_match_all("|<title>(.*)</title>|U",$string,$matches, PREG_PATTERN_ORDER);

    folgende Konstruktion sollte Abhilfe schaffen:

    preg_match_all("|<title>(.*?)</title>|is",$string,$matches, PREG_PATTERN_ORDER);

    Der Modifier i sorgt dafür, daß Groß- und Kleinschreibung nicht unterschieden wird,
    s bedeutet, daß . auch auf Zeilenumbrüche (\n) zutrifft.
    Das U habe ich mal entfernt und das Muster mit ? gefüttert, weil Du den Ausdruck dann genauso auch in Perl einsetzen kannst, wenn Du möchtest.

    Nachlesen kannst Du alles unter
    http://www.php.net/manual/de/pcre.pattern.modifiers.php (englisch)
    und
    http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#flags (deutsch, auf Perl bezogen)

    Schönen Gruß aus Bilk

    Rainer