我需要一个perl正则表达式来检查$ currentLine中是否存在$ currentSearch。 检查应包括$ currentLine中有“Load”关键字。
匹配
$currentSearch = DNA/3/44.com/index.html
要
$currentLine = Load DNA/3/44.com/index.html .....(3)
我尝试了这个,但它不匹配......
if($currentLine[$k] =~ m/Load\s+$currentSearch[$i]\s+\.+\\(d+\)/)
修改 即使这不起作用
if($currentLine[$k] =~ m/$currentSearch[$i]/)
答案 0 :(得分:3)
您有错误 - 您需要转义d字符以捕获数字而不是'd'char。你也有一个太多的反斜杠(你错过了第一个paren)。
这是一个有效的脚本:
$currentSearch = "DNA/3/44.com/index.html";
$currentLine = "Load DNA/3/44.com/index.html .....(3)";
if($currentLine =~ /Load\s+$currentSearch\s+\.+\(\d+\)/) {
print "matched\n";
} else {
print "no match\n";
}
答案 1 :(得分:3)
我怀疑你的问题来自不使用:
use strict;
use warnings;
在你的脚本中。
首先,前两个语句$currentSearch
和$currentLine
中的字符串没有引号。这可能是一个错字,但看起来很奇怪。
其次,在if语句中,您将它们称为数组而不是标量。假设这不是另一个错字,那可能是您问题的根源。 $currentSearch
和$currentSearch[$i]
指的是两个完全不同的变量。
没有警告和严格,即使使用两个未声明和未定义的变量也不会导致任何错误的迹象。
实际上这是:
perl -e 'if ($foo[0]=~ /$bar[1]/) { print "sure, why not?" }'
实际上是一个成功的匹配,并且会打印字符串,即使变量@foo
和@bar
都是完全空的。使用strict
和warnings
时,它会像应该的那样崩溃和刻录。
无论如何,这有效:
my $cs = "DNA/3/44.com/index.html";
my $cl = "Load DNA/3/44.com/index.html .....(3)";
if ( $cl =~ /Load\s+$cs[\s\.]+\((\d+)\)/ ) {
print "Yes: $1\n";
} else { print "Nope!" }
如果搜索字符串中有任何元字符,则可能导致很难检测到错误,在这种情况下,您可以尝试在搜索字符串中输入quotemeta
。
答案 2 :(得分:0)
if ($currentLine =~ /Load\s+\Q$currentSearch\E/) { ... }