Encoder: Regex gesucht

Hallo ihr

Ich möchte per PHP Dateien auslesen, die bestimmte Teile einer Webseite enthalten. Sieht etwa so aus.

Also so
<title>Meine Seite</title>
<style>
h1 { ... }
</style>
und hier Text ohne besondere Auszeichnung ......

Das möchte ich jetzt mit regex so auseinander nehmen dass ich die drei Textteile getrennt bekomme. Problem: die speziell ausgezeichneten Teile sind nicht immer vorhanden. Sonst wäre das hier ok:
preg_match("|<title>(.*)</title>(.*)<style>(.*)</style>(.*)|s", file_get_contents(...), $parts);

Die Reihenfolge bei den ausgezeichneten Teilen ist garantiert. Aber ich krieg da nicht rein dass etwas auch einfach gar nicht vorhanden sein kann.
Hat jemand nen Tip?

  1. @@Encoder:

    nuqneH

    Hat jemand nen Tip?

    Ja: keinen regulären Ausdruck verwenden, sondern einen HTML-Parser.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Hi,

    preg_match("|<title>(.*)</title>(.*)<style>(.*)</style>(.*)|s", file_get_contents(...), $parts);

    . heißt alles außer \n. Deswegen bietet sich hier z.B. ([\s\S]*) an.

    Grüße

    • Steffen
    1. Ich hab jetzt dieses hier
      preg_match("|(<tag1>(.*)</tag1>)?\s*(<tag2>(.*)</tag2>)?\s*  ...tag3 usw..  \s*(.*)|s", $content, $parts);
      Dann gehts auch wenn nicht jedes Tag da ist.

      . heißt alles außer \n.

      Also bei mir packt .* auch Zeilenumbrüche.