正则表达式 – 如何使用字母顺序搜索带有字母的六个字母的单词
发布时间:2020-12-14 05:38:57 所属栏目:百科 来源:网络整理
导读:我最近创建了一个Perl脚本,用以下代码搜索以D和E开头的单词: $infile = 'words.txt';open(IN,$infile);$count = 0;while ($word = IN) {chomp($word);if ($word =~ /^dw*e$/i) { print "$wordn"; $count++; }}print "$countn"; 我最近决定分叉代码并创建
我最近创建了一个Perl脚本,用以下代码搜索以D和E开头的单词:
$infile = 'words.txt'; open(IN,$infile); $count = 0; while ($word = <IN>) { chomp($word); if ($word =~ /^dw*e$/i) { print "$wordn"; $count++; } } print "$countn"; 我最近决定分叉代码并创建一个脚本,搜索一个单词,这个单词是六个字母,单词中的字母是按字母顺序排列的(A到Z).我打算使用位于usr / share / dict / words的Unix标准字典,而不是使用words.txt.如何通过修改此代码来实现此目的? 解决方法
看起来你真正需要的是一种算法,用于检查给定单词中的字母是否按字母顺序排列.有几种方法,但是这个子程序的工作原理是将单词拆分为其组成字符列表,对列表进行排序并重新组合.如果结果与原始单词匹配,则该单词已经排序.
use strict; use warnings; use feature 'fc'; for (qw/ a ab ba cab alt effort toffee /) { print "$_n" if in_alpha_order($_); } sub in_alpha_order { my $word = fc(shift); my $new = join '',sort $word =~ /./g; return $new eq $word; } 产量 a ab alt effort 如果你真的想在正则表达式中这样做,你可以建立一个像 a(?=[a-z]) | b(?=[b-z]) | c(?=[c-z]) ... 这是一个以这种方式工作的程序.其输出与上述输出相同. use strict; use warnings; my $regex = join '|',map "${_}(?=[$_-z])",'a'..'z'; $regex = qr/^(?:$regex)*.$/i; for (qw/ a ab ba cab alt effort toffee /) { print "$_n" if $_ =~ $regex; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |