我想使用正则表达式模式不知道现有字符串是否与该模式匹配,而是生成与该模式匹配的所有可能值。例如,使用\ d \ d \ d模式,它应生成包括“ 000”,“ 001”,“ 002”等,直至“ 999”的单词。这些可以以任何格式,数组或逗号分隔列表等形式提供。如何在Perl中完成?这是内置功能还是需要模块?
它不需要处理所有可能的模式,只需为数字或字母的模式生成语言就足够了。
对于您在注释中提到的非常简单的情况(只有三位数),这只是一个很小的递归,就像这里(仅处理\d
):
use strict;
use warnings;
my %results = (); # global variables are evil
sub generate {
my ($pattern) = @_;
if ( $pattern =~ /^(.*)\\d(.*)$/ ) {
my ( $before, $after ) = ( $1, $2 );
for my $digit ( 0 .. 9 ) {
generate( $before . $digit . $after );
}
} else {
$results{$pattern} = 1;
}
}
generate('a\db\dc');
print join( "\n", sort keys %results ), "\n";
这种递归方法实际上并不依赖于特定的语言,并且可以在任何编程语言中以相同的方式实现,这里没有Perl特定的内容。
对于更复杂的表达式,请使用Regexp::Genex
@daxim建议的格式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句