加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 通过正则表达式进行不区分大小写的有序单词搜索

发布时间:2020-12-14 02:29:59 所属栏目:百科 来源:网络整理
导读:我刚刚开始在perl中使用正则表达式.在浏览了各种在线教程之后,我想要编写一个正则表达式来匹配命令指定的不区分大小写的单词匹配. 我正在尝试确定字符串“A”是否由字符串“B”的单词或单词序列组成,并且我希望不区分大小写地执行此操作. 例如,如果字符串“B
我刚刚开始在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 =~ /^$rez/) {
   print "matchn";
} else {
   print "no matchn";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读