regex - Perl - 在字符串中查找相同的字符序列
问题描述
事实上,我有一个文本文件,其中每行都写有句子,我必须为每行的每个句子找到相同的字符序列。例如,其中一个句子是
一分耕耘一分收获
并且我希望能够确定该字符串中共享字符的序列是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";
}
}
解决方案
这是一个简单的概念证明,它匹配ain
“pain”,然后稍后在字符串中查找相同的匹配,然后在“gain”中找到它。我正在使用“匹配名为子模式'Match'的匹配,这就是正则表达式匹配ain(或no)的方式。
#!/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,则匹配变为“no”,而不是“ain”。
为您的实际需求实现更强大的正则表达式,只需遍历您拥有的每一行并测试匹配。
顺便说一句,regex101.com是学习和练习正则表达式的绝佳资源。我推荐它10000%。
推荐阅读
- python - 在使用 Python-docx 时,如果字符串与 Python 中搜索的字符串部分匹配(高达 90%),如何替换字符串?
- c++ - uWebsockets 架构 x86_64 的未定义符号
- ruby-on-rails - 未初始化的常量 Users::RegistrationsController::Shortener Devise + Gem
- c# - C# SharpSvn:将特定修订从一个分支合并到另一个分支
- maven - 未能执行目标 org.jooq:jooq-codegen-maven:3.11.5:generate
- node.js - Nodejs通过添加,更新,删除在单个表中序列化多对多关系映射
- android - 在回收站视图中获取序列号
- php - 如何使用一个或多个搜索词搜索字符串并在每次匹配后添加一个字符串?
- ember.js - ReferenceError:找不到变量:身份验证器 Ember js 错误
- sql - 数据库条目未按预期顺序显示