Thread Perl regex Fehler (19 answers)
Opened by dax42 at 2004-07-09 12:20

Crian
 2004-07-09 13:15
#84085 #84085
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Wenn Du es denn unbedingt ohne Modul haben willst:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
{
local $/; # slurpmode
my $html = <DATA>;
my @link = grep {$_ =~ /^[RT]\d+$/} $html =~ m~<a\s[^>]+>([^<>]+)</a>~ig;
print "$_\n" for @link;
}

_ _ D A T A _ _
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A>     -202   -135   <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00929">R00929</A>; HS$IFNB_14.
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A>     -167    -94   <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00916">R00916</A>; HS$IFNB_01; Binding factors: R2 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00712">T00712</A>.
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A>     -100    -61   <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=R00917">R00917</A>; HS$IFNB_02; Binding factors: IRF1 <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00422">T00422</A>, IRF-2
<A HREF="/pub/databases/transfac/doc/gene1.html#BS" target="_new">BS</A>     <A HREF="/cgi-bin/pub/databases/transfac/getTF.cgi?AC=T00425">T00425</A>.


Ausgabe:

Code: (dl )
1
2
3
4
5
6
R00929
R00916
T00712
R00917
T00422
T00425


Die wichtige Zeile ist diese:

my @link = grep {$_ =~ /^[RT]\d+$/} $html =~ m~<a\s[^>]+>([^<>]+)</a>~ig;

Der rote Teil extrahiert alle Linksbeschreibungen, der blaue stellt sicher, dass nur die aufbewart werden, die Du haben willst (beginnend mit R oder T und dann folgen nur Ziffern).

Natürlich kann man das auch in einem RE zusammenfassen, wie Renee gezeigt hat:

my @link = $html =~ m~<a\s[^>]+>([RT]\d+)</a>~ig;\n\n

<!--EDIT|Crian|1089365042-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Perl regex Fehler