Schrift
[thread]7767[/thread]

alle wörter matchen

Leser: 1


<< >> 3 Einträge, 1 Seite
Froschpopo
 2006-03-07 01:17
#63522 #63522
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
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-->
renee
 2006-03-07 09:30
#63523 #63523
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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";
}
}

Code: (dl )
1
2
3
~ 5> perl community.pl 
hallo K: no
hallo Karl: yes
\n\n

<!--EDIT|renee|1141716793-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2006-03-13 14:00
#63524 #63524
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
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:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
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:

Code: (dl )
1
2
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
<< >> 3 Einträge, 1 Seite



View all threads created 2006-03-07 01:17.