我正在尝试在这样的多行输入字符串中查找特定关键字,
this is input line 1
this is the keyword line
this is another input line
this is the last input line
多行输入存储在名为“$ inputData”的变量中。现在,我有两种方法可以找到“关键字”这个词,
方法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
}
我想知道这两种方法如何相互比较,对于实际的代码性能和执行时间,什么是更好的方法。此外,还有更好,更有效的方法来完成这项任务吗?
答案 0 :(得分: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模块。
根据documentation m
正则表达式修饰符:将字符串视为多行。也就是说,改变“^”和“$”来匹配字符串左端和右端的行的开头或结尾,以匹配字符串中的任何位置。我没有看到{{1你的正则表达式中也没有^
所以它在那里没用。