我需要从字符串中捕获子字符串。为此,我使用一个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,所以任何机构都可以告诉我第二种情况有什么问题。
答案 0 :(得分:1)
您打印的是错误的变量,因为在第一种情况下,您有打印$captured
变量
但在下一种情况下,您打印了$path
,因此您可以打印$captured
,即可获得准确的结果。
print "After_path -> $captured\n";
答案 1 :(得分:0)
在bash中,您不需要在单引号内引用反斜杠。那就是你打字 '\某某\ ABC \ DEF \日志\ LA.1.0 ......'。希望这会有所帮助。