2014-07-16 35 views
0

我有这将有条目正则表达式:匹配多发IDS但不完全相同

33745 Neeraj库马尔33743的文件中:授权Web服务33743个WADL代问题

我想以这样的方式来使用正则表达式它不应该匹配相同的身份证两次,即它可以匹配倍数,但不相同 以上情况下,它应该说33745的计数为1和33743为1

我目前的代码结果为33745计数为1和33743 as 2

foreach $line (@file_list) { 

     while ($line =~ m/(\d{4,}[,|:])/g){ 
     @temp = split(/[:|,]/, $1); 
     push @work_items, $temp[0]; 
             } 
           } 

my %count; 
map { $count{$_}++ } @work_items; 

回答

0

独特的匹配:反向引用在排除模式

要检索所有唯一的ID,这就够了:

@result = $subject =~ m/(\d+)(?!.*\1)/g; 

说明

  • (\d+)捕获的括号该ID为第1组
  • 负lookehead (?!.*\1)断言它不可能匹配任何字符,然后将ID按组1

参考捕获

+0

让我知道这是否工作或你需要调整。 :) – zx81

+0

我的文件内容如下:(----)Manish Garg <[email protected]> 74163:V2.0.1_I3_SIT:KeyStroke Logger解密文件的键盘按键显示与CCM时间相差4小时。 - 74163:KeyStroke Logger解密文件的击键时间与CCM时间相差4小时。 2014/07/04 这给出的输出为:updated_workitem值>“74163” Count>“2” 我希望count的值为1,以寻找id的唯一出现: – user3616128

+0

在[this demo](http ://regex101.com/r/nJ8cJ8/7)你可以看到每个唯一的号码是匹配的。但是,正则表达式不知道“什么是ID”,如果你想让它更具体,让我知道是什么使它特别。 – zx81

相关问题