Thread Zeichen in RegEx darf nicht zwischen <> stehen (26 answers)
Opened by Matze at 2006-04-18 11:40

sid burn
 2006-04-18 17:45
#65017 #65017
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Ich hab dafür ein etwas längeres Skript geschrieben. Vielleicht geht das auch mit einem Regulären Ausdruck, aber diese Lösung ist mir eigentlich sofort eingefallen, deswegen habe ich diese eben geschrieben.

zahlrot.txt
Code: (dl )
1
2
3
4
5
6
7
<font color="#000000"><pre>
<br>"Hallo"
<br>1234<br>214214<br>346<br>
<br>
<br>();
<br>("Test! 2134",12421<br>
);</pre></font>


zahlrot.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w

$file = shift;

$/ = undef;
open FILE, "<", $file;
$_ = <FILE>;
close FILE;

while ( not m/\G\z/gc )
{
if ( m/\G(<(?>[^>"]|"[^"]*")*>)/gc ) { print "$1"; }
elsif ( m/\G(\d+)/gc ) { print "<font color=red>$1</font>"; }
elsif ( m/\G([^<\d]*)/gc ) { print "$1"; }
else
{
$loc = pos($file);
die "Fehler an Position $loc in Datei $file\n";
}
}


Aufruf mittels:
Code: (dl )
./zahlrot.pl zahlrot.txt


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
<font color="#000000"><pre>
<br>"Hallo"
<br><font color=red>1234</font><br><font color=red>214214</font><br><font color=red>346</font><br>
<br>
<br>();
<br>("Test! <font color=red>2134</font>",<font color=red>12421</font><br>
);</pre></font>


Ich hoffe das entspricht deinen Erwartungen?


EDIT:
Größer Gleich Zeichen innerhalb von Anführungszeichen werden nun ignoriert.\n\n

<!--EDIT|sid burn|1145374362-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Zeichen in RegEx darf nicht zwischen <> stehen