gpt4 book ai didi

regex - 通过正则表达式不区分大小写的有序词搜索

转载 作者:行者123 更新时间:2023-12-04 17:01:54 31 4
gpt4 key购买 nike

我刚开始使用 perl 中的正则表达式。在浏览了各种在线教程之后,我想写一个正则表达式来匹配指定的不区分大小写的单词匹配顺序。

我正在尝试确定字符串“A”是否包含一个单词或字符串“B”的一系列单词,并且我想不区分大小写地执行此操作。

例如,如果字符串“B”是“John Von Neumann”,那么“JOhn”、“Von NeuMann”、“VoN”、“john neuMann”将是 匹配 ,但像 "Joh"、"NeumaNn VoN"、"Vonn"这样的字符串会 不是 成为一场比赛。

我不知道如何用正则表达式做到这一点,知道吗?

最佳答案

让我们暂时忽略大小写。

John Von Neumann

可以匹配
John Von Neumann    1 1 1
John Von 1 1 0
John Neumann 1 0 1
John 1 0 0
Von Neumann 0 1 1
Von 0 1 0
Neumann 0 0 1

所以你正在寻找的正则表达式模式是
/^(?:John Von Neumann|John Von|John Newmann|John|...)\z/i

以下是构建列表的方法:
sub true_indexes {
my ($n) = @_;
my $i = 0;
my @indexes;
while ($n) {
push @indexes, $i if $n & 1;
++$i;
$n >>= 1;
}
return @indexes;
}

my @words = split(' ', 'John Von Neumann');

my @patterns;
unshift @patterns, join ' ', @words[ true_indexes($_) ]
for 1 .. (2**@words)-1;

最后,我们可以生成模式:
my $pat = join '|', map quotemeta, @patterns;
my $re = qr/$pat/i;

你会像这样使用它:
if ($input =~ /^$re\z/) {
print "match\n";
} else {
print "no match\n";
}

关于regex - 通过正则表达式不区分大小写的有序词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800672/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com