正则表达式:匹配多个ID但不相同

时间:2014-07-16 08:37:18

标签: regex perl

我有一个文件,其条目为

33745 Neeraj Kumar 33743:许可证Web服务33743 WADL生成问题

我想以这样的方式使用正则表达式,它不应该匹配相同的id两次,即它可以匹配多个但不是相同的 在上述情况下,应将33745的计数称为1,将33743计为1

我当前的代码结果为33745为1和33743为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;

1 个答案:

答案 0 :(得分:0)

唯一匹配:否定前瞻中的反向引用

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

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

<强>解释

  • (\d+)中的括号将ID识别为第1组
  • 否定lookehead (?!.*\1)声称无法匹配任何字符,然后是第1组捕获的ID

<强>参考