我是 perl 的新手,我想知道是否有一种方法可以生成与正则表达式匹配的所有组合。
如何生成所有匹配字符串的最佳方法是:
05[0,2,4,7][\d]{7}
提前致谢。
我是 perl 的新手,我想知道是否有一种方法可以生成与正则表达式匹配的所有组合。
如何生成所有匹配字符串的最佳方法是:
05[0,2,4,7][\d]{7}
提前致谢。
虽然您不能只使用任何正则表达式并生成它可能适合的任何字符串,但在这种情况下,您可以轻松适应和克服。
您可以使用glob
生成组合:
perl -lwe "print for glob '05{0,2,4,7}'"
050
052
054
057
但是,我不应该告诉你这\d{7}
实际上意味着几百万个组合,对吧?生成数字列表很简单,可以通过以下方式格式化它们sprintf
:
my @nums = map sprintf("%07d", $_), 0 .. 9_999_999;
那是假设您只在寻找 0-9 数字。
将这些数字与全局数字结合起来:Tada。
不,没有办法为某个正则表达式生成所有匹配项。考虑这个:
a+
该正则表达式有无数个匹配项,因此您无法将它们全部列出。
顺便说一句,我认为您希望您的正则表达式看起来像这样:
05[0247]\d{7}
[class]
然后有一种方法可以为这个特定的正则表达式生成所有(40 亿个)匹配项,即05[0247]\d{7}
:
use Modern::Perl;
for my $x (qw{0 2 4 7}) {
say "05$x" . sprintf '%07d', $_ for 0 .. 9999999;
}