重复语句的Perl正则表达式

重复语句的Perl正则表达式,perl,pcre,Perl,Pcre,我正在寻找一个匹配重复模式的正则表达式 比如说 The great eagle flied high flied high. 重复:flied high The call was done at night was done at night. 重复:在夜间完成 有没有办法做到这一点?我只需要正则表达式,这样我就可以使用grep-P来过滤一些文件 Found 5 files under folders: home folder, home folder, home folder, h

我正在寻找一个匹配重复模式的正则表达式

比如说

The great eagle flied high flied high.  
重复:
flied high

The call was done at night was done at night.  
重复:
在夜间完成

有没有办法做到这一点?我只需要正则表达式,这样我就可以使用
grep-P
来过滤一些文件

Found 5 files under folders: home folder, home folder, home folder, home folder, home folder  
重复:
主文件夹

The query returned this preferences for this user: color black, fried chicken, color black, fried chicken, white shirt, brown color
重复:
黑色,


本质上,我想做的是找到与之匹配的“重复句子”。

是的,只需在正则表达式中使用
\1
来表示重复匹配模式。我有意将此正则表达式限制为仅匹配2-4个单词短语,以限制它的工作难度:

#!usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
    if (my @phrases = /\b(\S+(?:\s+\S+){1,3})\s+\1/g) {
        print "$_\n" for @phrases;
    }
}

__DATA__
The great eagle flied high flied high.
The call was done at night was done at night.

你没有很好地定义你的问题。就目前情况而言,你可以写

my $s = 'The great eagle flied high flied high.';
print qq{"$1"\n} if $s =~ /(.+)\1/;
输出

" flied high"
"l"
但是,如果应用第二个字符串

my $s = 'The call was done at night was done at night.';
print qq{"$1"\n} if $s =~ /(.+)\1/;
输出

" flied high"
"l"

因此,解决方案取决于您拥有的数据集。如果您能更严格地定义您的问题,那么我们可以更好地帮助您。

您有没有为自己解决过这个问题做过任何努力?堆栈溢出是程序员在遇到问题时可以向他们的同时代人寻求帮助的地方。它不是用来作为So的免费编程的资源。要匹配任何超过4个单词短语的组合,它会是什么?使用
{1,3}
表示在第一个单词后增加1-3个单词。如果你想增加计数,你可以在那里。我建议你设置一些上限,即使它是任意高的限制。或者如果你真的不想要上限,你可以使用
+
表示一个或多个。是的。我认为加号是JU这不是我需要的。谢谢:)这并没有解决OP的第二个例子,在这个例子中,短语只在中间文本之后重复。在编写任何代码之前,这个问题需要更精确地定义。@Borodin实际上,考虑到他的问题的性质与如何搜索重复的表达式有关,答案最终是backreferences
\1
无论具体的实施细节或修订的规范如何。我同意,如果他事先对自己的问题投入更多精力,他将从这些论坛中获得更多好处,但我要说,作为对他所展示内容的回报,我展示了适当的努力水平。