Lev Benenson: Matching Operator (Perl sucht nicht die spitzen Klammern)

Beitrag lesen

Hi alle zusammen

Ich habe mit Perl folgende Probleme:

Ich habe eine HTML-Datei (doz.html). Das ist eine lange Tabelle, die aus 4
Spalten besteht. Der Quelltext einer  Zeile der Tabelle ist folgender:
....
<tr>
<td>HERZ</td> <!-- kuenftiger KEY in assoziativen Arrey -->
<td>Dipl.-Ing. Ronald Herzer</td>
<td>FbB</td>
<td>tätig für FbB/AR</td>
</tr>
....u.s.w.

Ich versuche ein assoziatives Arrey zu erstellen. In diesem Arrey muß KEY aus erster Spalte der Tabelle erstellt werden und VALUE aus den nächsten drei Spalten, getrennt durch Komma. Natürlich muessen alle Täge in spitzen Klammern in den assoziativen Arrey nicht vorkommen. Für diesen  Zweck habe ich folgendes gemacht:

1. Zuerst habe ich mein HTML-Datei (doz.html) in eine Zeile umgewandelt,  weil Perl zeilenweise arbeitet, und in andere Datei (doz.txt) gespeichert,:

$pfad1 ="c:\test\doz.html";
       open(DATEI1, "$pfad1");
       @inhalt1 = <DATEI1>;
       $pfad2 ="c:\test\doz.txt";
       open (DATEI2, ">$pfad2");
       foreach $zeile1 (@inhalt1){
       chomp $zeile1;
       }
       print DATEI2 "@inhalt1\n";
       close DATEI2;

2. Danach:

$pfad2 ="c:\test\doz.txt";
       open (DATEI2, "$pfad2");
       @inhalt2 = <DATEI2>;

$pfad3 ="c:\test\dozarrey.txt";
       open (DATEI3, ">>$pfad3");
          foreach $zeile2 (@inhalt2) {       # doz.txt besteht nur aus eine Zeile
             if ($zeile2 =~ m/<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>/g) {
                 $key=$1;
                 $value="$2$a$3$a$4";    # $a= ", ";
                 print DATEI3 "$key$b$value$c\n";     # $b= "", ""; $c="",\n"";
             }
         }
.........

Meine Problem, dass Perl  nicht die spitzen Klammern suchen will, deshalb Datei dozarrey.txt immer leer bleibt.  Wo ist der Fehler?

Ich bedanke mich für jede Hilfe