我正在尝试匹配
的行"/foldera/folderb/folderc/folderd/file.ext@@/main" + "/" + ANY_NUMBER:
所以例如:
(.+)(main)(.\d)
行:
/foldera/folderb/folderc/folderd/file.ext@@/main
/foldera/folderb/folderc/folderd/file.ext@@/main/0
/foldera/folderb/folderc/folderd/file.ext@@/main/1
/foldera/folderb/folderc/folderd/file.ext@@/main/2
/foldera/folderb/folderc/folderd/file.ext@@/main/3
/foldera/folderb/folderc/folderd/file.ext@@/main/4
/foldera/folderb/folderc/folderd/file.ext@@/main/5 (RLT-abcde, BLD-abcde, DEV-abcde)
/foldera/folderb/folderc/folderx/file12.ext@@/main/0
/foldera/folderb/folderc/folderx/file12.ext@@/main/1
/foldera/folderb/folderc/folderx/file12.ext@@/main/2
/foldera/folderb/folderc/folderx/file12.ext@@/main/3
/foldera/folderb/folderc/folderx/file12.ext@@/main/4
/foldera/folderb/folderc/folderx/file12.ext@@/main/5
/foldera/folderb/folderc/folderx/file12.ext@@/main/6 (RLS-abcde-5.0, RLS-abcde-4.1)
虽然我的正则表达式匹配了所需的行(我在http://www.regexe.com/检查了它),但是在我的Perl程序中它不匹配
/foldera/folderb/folderc/folderd/file.ext@@/main
但确实匹配:
/foldera/folderb/folderc/folderd/file.ext@@/main/5 (RLT-abcde, BLD-abcde, DEV-abcde)
以下是代码:
use warnings;
use strict;
my @file_list = `find /folder -type f -name '*.ext'|xargs cleartool lsvtree -all`;
foreach my $file(@file_list){
if ($file=~m/(.+)(main)(.\d)/g){
print $file;
}
}
我很确定我犯了一个愚蠢的错误某个地方,但我只是看不到它!
提前感谢您的建议。
P.S。我在Perl 5.8和Perl 5.18下尝试了相同的结果,操作系统是Solaris。
答案 0 :(得分:1)
更改
print $file;
为:
print "$MATCH\n";
因此您只打印与正则表达式匹配的行的部分。
您还应将\d
更改为\d+
,以允许包含多个数字的数字。
答案 1 :(得分:0)
快看之后
/foldera/folderb/folderc/folderd/file.ext @@ /主
最后没有号码。并且\ d需要数字; - )
您可能还会发现此网站有用:http://regexpal.com/
答案 2 :(得分:0)
我认为不符合您的行,因为您的正则表达式明确地在末尾寻找数字
尝试将正则表达式更改为:(注意末尾的curley括号)
(+)(主要)(\ d){0,1}
或者我个人会这样写:
(。*?)主(\ / \ d *){0,1}
希望这有帮助!