3

我是 perl 的新手,我想知道是否有一种方法可以生成与正则表达式匹配的所有组合。

如何生成所有匹配字符串的最佳方法是:

05[0,2,4,7][\d]{7}

提前致谢。

4

4 回答 4

5

虽然您不能只使用任何正则表达式并生成它可能适合的任何字符串,但在这种情况下,您可以轻松适应和克服。

您可以使用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。

于 2012-05-19T14:22:43.723 回答
4

不,没有办法为某个正则表达式生成所有匹配项。考虑这个:

a+

该正则表达式有无数个匹配项,因此您无法将它们全部列出。

顺便说一句,我认为您希望您的正则表达式看起来像这样:

05[0247]\d{7}
于 2012-05-19T13:27:28.730 回答
3

2012年答案

于 2012-05-19T14:53:50.073 回答
1

然后有一种方法可以为这个特定的正则表达式生成所有(40 亿个)匹配项,即05[0247]\d{7}

use Modern::Perl;

for my $x (qw{0 2 4 7}) {
    say "05$x" . sprintf '%07d', $_ for 0 .. 9999999;
}
于 2012-05-20T04:53:50.100 回答