User since
2003-08-15
2653
Artikel
BenutzerIn
folgender regex:
/\b([a-zA-Z0-9]{2,50})\b/
leider, wenn der string "hallo K" lautet, prüft er das "K" nicht mehr als Wort.
Er prüft immer nur bis zu \b, danach nichtmehr.
Wie kann man das machen, dass er jedes Wort matcht? geht das ohne schleife?
der obige regex müsste eigentlich false geben, da das K ja nur aus einem zeichen besteht.\n\n
<!--EDIT|Froschpopo|1141687057-->
User since
2003-08-04
14371
Artikel
ModeratorIn
#!/usr/bin/perl
use strict;
use warnings;
for('hallo K','hallo Karl'){
if($_ =~ /^(?:\s*\b([a-zA-Z0-9]{2,50})\b\s*)+$/){
print "$_: yes\n";
}
else{
print "$_: no\n";
}
}
~ 5> perl community.pl
hallo K: no
hallo Karl: yes
\n\n
<!--EDIT|renee|1141716793-->
User since
2003-08-04
5870
Artikel
ModeratorIn
Deine Regexp prüft, ob ein Wort vorkommt, das deinen Anforderungen entspricht. Wenn du prüfen willst, ob alle Worte den Anforderungen entsprechen, splitte deinen Text vorher:
my @strings = ('Hallo K', 'Hallo Karl');
for (@strings) {
print "$_ : ", teste_string($_), "\n";
}
sub teste_string {
my ($string) = @_;
my $ok = 1;
for (split /\s+/, $string) {
$ok = 0 unless /\b([a-zA-Z0-9]{2,50})\b/;
}
return $ok;
}
Ausgabe:
Hallo K : 0
Hallo Karl : 1
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