fahndung: Regulärer Ausdruck. Problem...

Hallo,

ich möchte mittels regulären Ausdruck Teilstrings aus einem HTML-String filtern.

...
<tr>
<td>Subject:</td>
<td><input type=field size=40 name='data[subject]' value='Betreff'></td>
</tr>
<tr>
<td>Text:</td>
<td><textarea name="data[text]" rows=10 cols=40 wrap=physical>Hallo</textarea></td>
</tr>
...

Ein Ausdruck soll mir den Inhalt von value des Input-Elements liefern (-> Betreff),
der andere Ausdruck soll mir den Textinhalt der textarea liefern (-> Hallo). Mit
welchem regulären Ausdruck lässt sich das lösen? Probiere schon relativ lange und
komme leider auf keine Lösung...

Danke für die Unterstützung,
Daniel F.

  1. Hallo Daniel,

    generell empfiehlt sich bei solchen Problemstellungen ein HTML-Paser, wie in die DOM-Erweiterungen PHPs bereitstellen. Kannst Du damit glücklich werden, oder muss es unbedingt ein RegExp sein?

    Gruß aus Berlin!
    eddi

    --
    Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!
    1. generell empfiehlt sich bei solchen Problemstellungen ein HTML-Paser, wie in die DOM-Erweiterungen PHPs bereitstellen. Kannst Du damit glücklich werden, oder muss es unbedingt ein RegExp sein?

      Gruß aus Berlin!
      eddi

      Hallo Eddi,

      kein Problem. Wenn Du mir ein Beispiel dafür geben könntest...

      Gruß,
      Daniel F.

      1. Re:

        kein Problem. Wenn Du mir ein Beispiel dafür geben könntest...

        $doc =new DOMDocument();  
        $doc->loadHTMLFile("filename.html");  
        $inp =$doc->getElementsByTagName('input');  
          
        // so erreichst Du dann den Attributenknoten "value" und dessen Wert:  
          
        echo $inp->item(0)->attributes->getNamedItem("value")->nodeValue;
        

        Gruß aus Berlin!
        eddi

        --
        Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!
  2. Falls Du ein zum geposteten Beispiel 1 zu 1 passendes Suchmuster nutzen möchtest:

    ~<tr>\s*<td>Subject:</td>\s*<td><input[^>]+value='([^']*)'[^>]*></td>\s*</tr>\s*<tr>\s*<td>Text:</td>\s*<td><textarea[^>]*>([^<]*)</textarea></td>\s*</tr>~s

    Zu schnellen Austesten von regulären Ausdrücken ist im übrigen die frei verfügbare Win.Version des RegExCoach eine gute Hilfe.

    PS: Das Muster habe jetzt ich allerdings nur im genannten RegExCoach getestet, da es allerdings sehr einfach ist, gehe ich davon aus das preg_match/_all damit auch klar kommen.)