Thread perldoc für alte Versionen bzw regex Frage (4 answers)
Opened by torsten at 2011-06-14 16:57

torsten
 2011-06-14 20:04
#149611 #149611
User since
2010-08-16
45 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke.

Zur Info, es geht. Wobei zu beachten ist, dass CODE keine my Variablen deklarieren darf unter Perl 5.8.8. Sonst segfault.

Hier ist mein Problem: Finde alle Wörter, die zu mehr als 50% aus Ziffern bestehen,
wobei "Wort" als Folge von Nicht-Space zu verstehen ist.

Und die Lösung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub md {
  my $n=$_[0]=~tr!0-9!!/length $_[0];
  warn "^N: $_[0], n=$n\n";
  $n;
}
print $1 while $ARGV[0]=~/
                           (?:^|(?<=\s))          # Wortgrenze
                           (\S+(?=\s|$))          # das Wort als $1 inkl. Begrenzung
                           (?(?{md($^N)<=0.5})    # die Bedingung (negiert)
                             \A                   # schlägt an dieser Stelle immer fehl
                           )
                         /gx

Durch die Angabe der Wortbegrenzer wird erreicht, dass md() pro Wort nur einmal aufgerufen wird und nicht n-fach für jeden Substring.

In neueren Perls sollte man statt \A vielleicht (*FAIL) benutzen, der besseren Lesbarkeit wegen.

View full thread perldoc für alte Versionen bzw regex Frage