[英]Perl - Unexptected behaviour with Regex in Array
我正在嘗試匹配具有
"/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;
}
}
我很確定自己在某個地方犯了一個愚蠢的錯誤,但是我看不到它!
預先感謝您的建議。
PS我在Perl 5.8和Perl 5.18下嘗試過,結果相同,操作系統是Solaris。
更改
print $file;
至:
print "$MATCH\n";
因此,您只打印與正則表達式匹配的行的一部分。
您還應該將\\d
更改為\\d+
,以允許數字多於一個數字。
快速瀏覽之后
/foldera/folderb/folderc/folderd/file.ext@@/main
末尾沒有數字。 和\\ d需要數字;-)
您可能還會發現此站點有用: http : //regexpal.com/
我認為與您的行不匹配,因為您的正則表達式在末尾明確尋找一個數字
嘗試將正則表達式更改為:(注意最后的居里括號)
(。+)(main)(。\\ d){0,1}
或者我個人會這樣寫:
(。*?)main(\\ / \\ d *){0,1}
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.