1

我正在尝试在这样的多行输入字符串中查找特定关键字,

this is input line 1
this is the keyword line
this is another input line
this is the last input line

多行输入存储在一个名为“$inputData”的变量中。现在,我有 2 种方法来查找单词“关键字”,

方法 1:
使用 split 使用“\n”分隔符将行放入数组中,并使用 foreach 循环迭代和处理每一行,如下所示,

my @opLines = split("\n", $inputData);

# process each line individually
foreach my $opLine ( @opLines )
{
    # look for presence of "keyword" in the line
    if(index($opLine, "keyword") > -1)
    {
        # further processing
    }
}


方法2:
使用正则表达式,如下,

if($inputData =~ /keyword/m)
{
    # further processing
}


我想知道这两种方法如何相互比较,以及就实际代码性能和执行时间而言,更好的方法是什么。此外,是否有更好、更有效的方法来完成这项任务?

4

1 回答 1

2
my @opLines = split("\n", $inputData);

将创建变量@opLines,分配内存,并搜索"\n"整个槽$inputData并将找到的行写入其中。

# process each line individually
foreach my $opLine ( @opLines )
{

将处理数组中每个值的全部代码@opLines

    # look for presence of "keyword" in the line
    if(index($opLine, "keyword") > -1)

"keyword"在每一行中搜索。

    {
        # further processing
    }
}

和comapare

if($inputData =~ /keyword/m)

将搜索"keyword"并在找到第一次出现时停止。

{
    # further processing
}

现在猜测,什么会更快并且消耗更少的内存(这也会影响速度)。如果您猜不准,请使用Benchmark模块。

根据文档 m正则表达式修饰符:将字符串视为多行。也就是说,将“^”和“$”从仅匹配字符串左右两端的行首或行尾更改为匹配字符串中的任何位置。我在你的正则表达式中都没有看到^$所以它在那里没用。

于 2013-08-12T07:31:25.170 回答