Richard Bagshaw schreef:
> @words = $sentance =~ m/[A-Za-z]+/gi;
Because of the /i, you don't need to mention the capitals.
Alternatives:
@words = ($sentence =~ m/\S+/g);
@words = split ' ', $sentence;
@words = ($sentence =~ m/[[:alpha:]]+/g);
@words = split /[^[:alpha:]]+/, $sentence;
(that last one would split up "shit_head" into "shit" and "head")
> foreach(@words) {
>
> # first check :: passes words that contain swear words as
> long as # they have characters either side. ie (harassment).
>
> # second check :: if the first check is passed then it checks
> again # for swear words.
>
> # third check :: if it gets through to here then its
> assumemed a nice
> # word.
>
> if (m/[a-zA-Z].*(ass|fuck|cunt|shit)[a-zA-Z].*/gi) {
> print "Good Word [boxed] : $&\n";
> } elsif (m/ass|fuck|cunt|shit/gi) {
> print "Bad Word [found] : $_\n";
> } else {
> print "Good Word [passed] : $_\n";
> }
Alternative:
$bad = qr/a[s$][s$]|f[u*]ck|cunt|sh[i1]t/i;
for (@words) {
if ( m/$bad/ ) {
if ( m/\b$bad\b/ ) {
print "Bad Word [found] : $_\n";
} else {
print "Good Word [boxed] : $_\n";
}
} else {
print "Good Word [passed] : $_\n";
}
}
But you'ld better go this way:
#!/usr/bin/perl
use strict;
use warnings;
use Regexp::Profanity::US;
my $RE = $RE{profanity}{us}{normal}{label}{-keep}{-dist=>3};
while (<>) {
warn "PROFANE:$1" if /($RE)/;
}
--
Affijn, Ruud
"Gewoon is een tijger."
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>