Perl-查找字符串中相同的字符序列

时间:2019-03-21 22:29:59

标签: regex string perl

实际上,我有一个文本文件,其中每一行都写有句子,而且我必须为每一行的每个句子找到相同的字符序列。例如,其中一个句子是

no pain no gain

并且我希望能够确定此字符串中共享字符的顺序为ain

我尝试使用正则表达式(顺便在stackoverflow上找到),但是它是查找相同连续字符的序列,而这并不是我想要的。因此,作为perl的初学者,我不知道该如何实现。 预先感谢您的时间和关注。

编辑:这是我尝试过的,但不是我想要的:

#!/usr/bin/perl

use utf8;

open $file, "<:encoding(utf8)", "text.txt";

while($ligne=<$file>)
{   
    while($ligne =~ /(.)\1+/g)
    {
        $gram = $1;
        print "$ligne\n";
        print "$gram\n";
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个简单的概念证明,它与“ {pain”的ain相匹配,然后稍后在字符串中查找相同的匹配,然后在“ gain”中找到该匹配。我正在使用“匹配命名子模式'Match',这是正则表达式匹配ain(或不匹配)的方式。

#!/usr/bin/perl
use strict;
use warnings;

my $string = "no pain no gain";

if ($string =~ m/(?<Match>[a-zA-Z]{3}).*\k<Match>/g) {
    print "Match: $+{Match}\n";
}

输出:

Match: ain

请注意,如果将长度说明符更改为2,则匹配项将变为“否”,而不是“ ain”。

为满足您的实际需求而实现更强大的正则表达式,然后遍历每行并测试匹配项。

顺便说一句,regex101.com是学习和练习正则表达式的绝佳资源。我推荐10000%。