Thread HTML mit Perl regex parsen (9 answers)
Opened by Lauvia at 2013-09-06 12:50

Linuxer
 2013-09-06 14:03
#169941 #169941
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Auch wenn's nur ein einfaches HTML ist, ist HTML eigentlich nicht regulär genug für Reguläre Ausdrücke.
Nun baut man für das gegebene Beispiel einen Regex auf und der funktioniert auch für das Beispiel.
Dann kommt eine Variation der Quelldaten ins Spiel und der Regex passt nicht mehr; hat man ihn dann angepasst, kommt die nächste Variation, etc. ...

Wenn Du die HTML-Tags eh nicht interessant findest und mit Zeichenklassen der Art "[A-Z]" erschlagen willst, lass das doch raus. Beschränke Deinen Regex auf das Wesentliche, was Dich interessiert.

Beispiel:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
my $line = <<LINE;
<TR class='passed'><TD>CAN signal</TD><TD>'DISP_RQ_GR_GRB' available in Inca.</TD><TD>PASSED</TD></TR>
LINE

# mehrzeiligen Regex mit Kommentaren
my $regex = qr{

  # wir brauchen die verwendete class
  class='([^']+)'

  # dann kommt erstmal uninteressantes (aber bitte sowenig wie moeglich)
  .*?

  # innerhalb einer tabellenzelle zwei strings einfangen
  <TD>'([^']+)'\s*([^<]+)</TD>

}x;  # ENDE Regex


if ( my ($Inca_Vchk, $Inca_Name, $Inca_Comment) = $line =~ $regex ) {
  print $Inca_Vchk, "\n",
    $Inca_Name, "\n",
    $Inca_Comment, "\n",
  ;
}


Aber trotzdem, schau Dir mal einen HTML-Parser und seinen Einsatz an ...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread HTML mit Perl regex parsen