1

我想从我的源文本中提取满足这些条件的字符串:

  • 字符串的第一个字母既是一行的第一个字母又是一个元音。
  • 字符串继续到下一个.;(不管换行符)

我试过这个:

$_ = join("",<>);

foreach ($text =~ /^[AEIOUaeiou][\w\s,]*[.;]/m)
{
    print "$text\n";
}

这应该如何工作的一个例子:

Input:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In aliquet lobortis vehicula. Sed
augue lectus, mattis nec tempus vel, mattis vel sapien, morbi venenatis faucibus pulvinar,
quisque ut semper leo; Nam porta risus et dui molestie sodales. Sed ullamcorper, orci ut
suscipit cursus, ipsum ipsum scelerisque velit, vel facilisis ligula urna eu felis.
Quisque sed orci eu felis rhoncus fermentum lobortis quis lorem. Nulla hendrerit, ligula
semper sagittis viverra, quam lacus condimentum augue, ut varius augue orci et velit.
Praesent tellus erat, vulputate non congue non, sagittis vel quam. Integer orci metus,
dapibus at suscipit scelerisque, ultrices at neque. Etiam fermentum molestie diam ac
semper. Donec convallis tincidunt augue, vel tincidunt mi aliquam ut. Maecenas rutrum ante
eget mauris lobortis ut consectetur neque congue.

Output:
"augue lectus, mattis nec tempus vel, mattis vel sapien, morbi venenatis faucibus   pulvinar,"
quisque ut semper leo;"
"eget mauris lobortis ut consectetur neque congue."
4

2 回答 2

1

试试这个:

while($text =~ /(?:(?<!.)|\n)([aeuoi][^;.]*[;.])/img)
{
    print "$1\n";
}
于 2013-04-10T01:19:38.843 回答
1

您的正则表达式有效,但您从未设置$text,也没有打印匹配项。

你可以这样做:(ideone demo)

use strict;
use warnings;

my $text = join "", <>;

while($text =~ /^[aeiou][^.;]*[.;]/mig)
{
        print "$&\n";
}

输出:

augue lectus, mattis nec tempus vel, mattis vel sapien, morbi venenatis faucibus pulvinar,
quisque ut semper leo;
eget mauris lobortis ut consectetur neque congue.
于 2013-04-10T06:57:19.583 回答