为什么相同的正则表达式具有不同

时间:2014-09-12 11:17:21

标签: perl

我需要从字符串中捕获子字符串。为此,我使用一个Regx,但在我的代码中没有按预期工作。

奇怪的是,如果我不接受用户的输入,那么regx工作正常:

这是我的代码:

案例一:正常工作

use strict;
use warnings;
my $path = "\\\\xyz\\abc\\def\\Logs\\LA.1.0\\04.04.04.128.281\\September-10---15.28.5\\wxzLogs\\PostBootLogs\\Complete_Logs_2014091016000\\ANR\\traces.txt_20140910204706";
my ($captured) = $path =~ /(.+?) \\PostBootLogs/x;
print "$captured\n";

Cas-2不工作:

my $path = $ARGV[0];
copylog($path);

sub copylog {
    print "Before_path -> $path\n";
    my ($captured) = $path =~ /(.+?) \\PostBootLogs/x;
    print "After_path -> $path\n";
}

在我使用相同字符串的情况下。我需要在第二种情况下使用regx,所以任何机构都可以告诉我第二种情况有什么问题。

2 个答案:

答案 0 :(得分:1)

您打印的是错误的变量,因为在第一种情况下,您有打印$captured变量 但在下一种情况下,您打印了$path,因此您可以打印$captured,即可获得准确的结果。

print "After_path -> $captured\n";

答案 1 :(得分:0)

在bash中,您不需要在单引号内引用反斜杠。那就是你打字 '\某某\ ABC \ DEF \日志\ LA.1.0 ......'。希望这会有所帮助。