我想匹配文件中的行并提取某个部分。 我的正则表达式可以与我所能找到的所有在线测试人员一起工作,但不能与我的Perl一起工作。 我在版本v5.10.0,无法更新。Perl正则表达式不匹配
正则表达式如下:
sub parse_bl_line {
if ($_[0] =~ m/^copy\s+.*?\s+(.*?\_.*)/) {
return $1;
} else {
log_msg("Line discarded: $_[0]", 4);
return "0";
}
}
应符合(只剩下最后的比赛)的测试数据的几行:
@bl_lines = (
"copy xxxxxx_/cpu b_relCAP_R3.0-1_INT5_xxxxx_cpu_p1",
"copy xxxxxxxx_/va_xxx_parameters b_relCAP_R3.0-1_INT5_xxxxx_va_xxx_parameters_p1",
"copy xxxxxxxx_/xxxxxxx_view.tcl b_relCAP_R3.0-1_INT5_xxxxxx_view.tcl_p0",
"copy xxxxx_/xxxxxarchivetool.jar b_relEARLY_DROP1_xxxxxarchivetool.jar_xx");
并调用函数:
foreach(@bl_lines) {
$file=parse_bl_line($_);
if ($file !~ "0") {
log_msg("Line accepted: $_", 4);
log_msg("File extracted: $file", 4);
}else {
log_msg("Line rejected: $_", 2);
}
}
我试图匹配最后一部分,例如
b_relEARLY_DROP1_xxxxxarchivetool.jar_xx
输出看起来如下:
20120726 13:15:34 - [XXX] ERROR: Line rejected: copy xxxxxx_/cpu b_relCAP_R3.0-1_INT5_xxxxx_cpu_p1
20120726 13:15:34 - [XXX] ERROR: Line rejected: copy xxxxxxxx_/va_xxx_parameters b_relCAP_R3.0-1_INT5_xxxxx_va_xxx_parameters_p1
20120726 13:15:34 - [XXX] ERROR: Line rejected: copy xxxxxxxx_/xxxxxxx_view.tcl b_relCAP_R3.0-1_INT5_xxxxxx_view.tcl_p0
20120726 13:15:35 - [XXX] INFO: Line accepted: copy xxxxx_/xxxxxarchivetool.jar b_relEARLY_DROP1_xxxxxarchivetool.jar_xx
20120726 13:15:35 - [XXX] INFO: File extracted: b_relEARLY_DROP1_xxxxxarchivetool.jar_xx
提示 我做了一些@BaL提出并发现该模式匹配作品,未经选择括号中的测试。
if ($_[0] =~ m/^copy\s+.+?\s+.+?\_.+$/) {
你如何设置'$ _ [0]'? – sergio 2012-07-25 15:42:46
什么*你的正则表达式匹配?你可以交换'返回1美元'为'说$ 1'并且告诉我们测试输入的输出吗?请参阅下面的@ Bal的评论。 – amon 2012-07-25 20:42:43
[适用于我!](http://codepad.org/o2nD2xJu)错误不在这里。显示你的整个代码**。 – daxim 2012-07-26 09:46:46