Schrift
[thread]6380[/thread]

Regulärer Ausdruck



<< >> 3 Einträge, 1 Seite
Gast Gast
 2004-07-05 18:26
#83895 #83895
Hi,
mit folgendem Code öffne ich ein Verzeichnis, ändere die HTML-Dateien darin und speicher sie anschließend in einem neuen Verzeichnis ab.
Code: (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
26
27
28
29
30
31
32
#!/usr/local/bin/perl

use strict;

# HTML-Dateien öffnen, ändern und speichern

my $datei_dir ="/data/daten/ib_test";
my $dateineu_dir ="/data/daten/ib_test/Dateien_neu";

opendir(DIR, $datei_dir) or die "Fehler bei opendir: $!\n";
while(my $datei=readdir(DIR))
{
print "$datei\n";
if($datei=~m/.+\.html*$/)
{
open(DATEI, "<$datei_dir/$datei") || die "Fehler bei open(< $datei): $!\n";
open(DATOUT,">$dateineu_dir/$datei") || die "Fehler bei open(> $datei): $!\n";
while (my $zeile =<DATEI>)
{
$zeile =~ s/<head>/<head>
<LINK REL=stylesheet TYPE="text\/css" HREF="\/daten\/ib\/css\/ib.css">/g;
$zeile=~s/<\/head>/<\/head>
<body>
$1<p style="display:none">$datei<\/p>/i;

print (DATOUT "$zeile");
}
close(DATEI);
close(DATOUT);
}
}
close(DIR);

In der HTML-Datei habe ich jetzt noch folgende Tags.
z.B.
<font FACE="Arial" SIZE=6>Ueberschrift 1</font>
<font FACE="Arial">normaler Text</font>
Jetzt sollte aus <font FACE="Arial" SIZE=6> -> <h1> werden und aus dem darauf folgenden </font> dann </h1>
Mein Problem ist nun, dass ich nicht weiss, wie ich es anstellen soll, dass nur die </font> in </h1> umgewandelt werden welche direkt auf <font FACE="Arial" SIZE=6> folgen. Die anderen schließenden Font tags sollten erstmal erhalten bleiben.
Gruß und danke für Eure Hilfe.
Magic
 2004-07-05 23:39
#83896 #83896
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bin zwar nicht der RegExpresionator persönlich, aber so sollte es doch eigentlich funktionieren:

Code: (dl )
 s|<font FACE="\w+" SIZE=\d*>(.+?)</font>|<h1>$1</h1>|i; 



Gruss Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
Dubu
 2004-07-06 14:56
#83897 #83897
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Nein. Das funktioniert nicht, sobald innerhalb der <font FACE=...> ... </font> noch weitere <font>-Tags vorkommen.

Die einzige gute Loesung ist, mit HTML::Parser oder HTML::TreeBuilder die Datei zu zerpfluecken und die relevanten Tags zu ersetzen.

@Glen: Du benutzt da oben in der Ersetzung ein $1, fuer dass es keinen Match gibt!?
<< >> 3 Einträge, 1 Seite



View all threads created 2004-07-05 18:26.