簡體   English   中英

Perl-數組中正則表達式的異常行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM