Regex 如何编写一个perl脚本,用特定的模式计算行数并打印它?

Regex 如何编写一个perl脚本,用特定的模式计算行数并打印它?,regex,perl,Regex,Perl,我正在尝试编写一个脚本,其中只有第一个字段具有相同的模式时才会变灰。我想把数字相同的行grep三次。请看下面。谢谢大家 1 Cat 1 Dog 1 Mouse 2 Cat 3 Cat 3 Dog 4 Cat 4 Dog 4 Mouse 输出应如下所示: 1 Cat 1 Dog 1 Mouse 4 Cat 4 Dog 4 Mouse 首先在整个文件中含糊其词会更容易 # (?m)^(\

我正在尝试编写一个脚本,其中只有第一个字段具有相同的模式时才会变灰。我想把数字相同的行grep三次。请看下面。谢谢大家

1    Cat

1    Dog

1    Mouse

2    Cat

3    Cat

3    Dog

4    Cat 

4    Dog

4    Mouse
输出应如下所示:

1   Cat

1   Dog

1   Mouse

4   Cat

4   Dog

4   Mouse

首先在整个文件中含糊其词会更容易

 #  (?m)^(\d+)(?!\d).*\s*(?:^\1(?!\d).*\s*){2}

 (?m)
 ^ 
 ( \d+ ) (?! \d )
 .* \s* 
 (?:
      ^ 
      \1 (?! \d )
      .* \s* 
 ){2}
Perl测试用例

$/ = undef;

$str = <DATA>;

while ( $str =~ /(?m)^(\d+)(?!\d).*\s*(?:^\1(?!\d).*\s*){2}/g)
{
    print "Matched:\n$&\n";
}    

__DATA__

1    Cat

1    Dog

1    Mouse

2    Cat

3    Cat

3    Dog

4    Cat 

4    Dog

4    Mouse

如果您的数据如所述(即具有相同编号的行是连续的,并且每行后面有两个换行符),则可以执行以下操作:

while ($data =~ /^(([0-9]++).*(?:\R\R\2 .*){2})/mg) {
    $_ .= $1 . "\n\n";
}

chomp;
print;

到目前为止,你尝试了什么?到目前为止你读了什么,你在哪里寻找答案,应该在谷歌搜索的第一个或第二个结果中找到。输入排序了吗?也就是说,我们能期望具有相同前缀的行始终相邻吗?另外,三是你在现实生活中需要的一个代表性数字吗(而不是说,数百万行)?我有一个问题,在我的问题中,一个是“1\n”,然后是“11\n”,然后是“1\n”,等等。。匹配(因为。*)。迫使我加入丑陋的前瞻。@sln:好的,我会加入空格和所有格量词。是的,比断言快。
while ($data =~ /^(([0-9]++).*(?:\R\R\2 .*){2})/mg) {
    $_ .= $1 . "\n\n";
}

chomp;
print;