Итак, ваше регулярное выражение не сможет подать слова в начале и конце строк. Вот для чего утверждение \b
:
#!/use/bin/perl
use strict;
use warnings;
use Text::Wrap;
my $file = "alice.txt";
open my $fh, "<", $file
or die "could not open $file: $!";
my @words;
while (<$fh>) {
push @words, /\b(t\we)\b/g;
}
print "three letter words that start with t and end with e:\n",
wrap "\t", "\t", "@words\n";
Вы можете найти четырехбуквенные слова, просто ища все, что является символом слова, который имеет более 3 символов. Класс символов \w
совпадает с символами слова, а квантификатор {4,}, скажем, соответствует предыдущему шаблону 4 или более раз. Соедините их с утверждением границы слова, и вы получите /\b\S{4,}\b/
:
#!/use/bin/perl
use strict;
use warnings;
use Text::Wrap;
my $file = "alice.txt";
open my $fh, "<", $file
or die "could not open $file: $!";
my @three;
my @four;
while (<$fh>) {
push @three, /\b(t\we)\b/g;
push @four, /\b(\w{4,})\b/g;
}
print "three letter words that start with t and end with e:\n",
wrap("\t", "\t", "@three\n"),
"four letter words:\n",
wrap "\t", "\t", "@four\n";
Вы можете использовать [[:alpha:]]
вместо \w
, если не хотите сопоставлять такие вещи, как "t0e"
.