实际上,我有一个文本文件,其中每一行都写有句子,而且我必须为每一行的每个句子找到相同的字符序列。例如,其中一个句子是
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";
}
}
答案 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%。