Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何迭代给定模式中可能的每个字符串?_Regex_Perl - Fatal编程技术网

Regex 如何迭代给定模式中可能的每个字符串?

Regex 如何迭代给定模式中可能的每个字符串?,regex,perl,Regex,Perl,这是一个正则表达式,用于验证url的主机名,取自 我们如何迭代、创建和循环所有可能的组合? 每次迭代正确匹配后,将对结果进行测试。这将发现10116种可能性。考虑到这颗行星是在1017秒前(几乎是昨天)才出现的,这应该会让你坚持一段时间 这不是一个通用的方法,只是在这种情况下效果很好的方法。请展示您迄今为止的工作,并解释您在这个问题上遇到的困难。您可能还想考虑它的规模-可能有效URL的数量非常大,并且通过它们循环的任何尝试都不会到达所有可能性集合中,或者触摸真实主机名的有意义的部分。这个话题讲得

这是一个正则表达式,用于验证url的主机名,取自

我们如何迭代、创建和循环所有可能的组合? 每次迭代正确匹配后,将对结果进行测试。

这将发现10116种可能性。考虑到这颗行星是在1017秒前(几乎是昨天)才出现的,这应该会让你坚持一段时间


这不是一个通用的方法,只是在这种情况下效果很好的方法。

请展示您迄今为止的工作,并解释您在这个问题上遇到的困难。您可能还想考虑它的规模-可能有效URL的数量非常大,并且通过它们循环的任何尝试都不会到达所有可能性集合中,或者触摸真实主机名的有意义的部分。这个话题讲得很好。请记住,您看到了大量的可能性——第二个字符类本身将匹配6.3x10^19个字符串。@Slade第二个字符类实际上将匹配
2.2e+109
可能的字符串。再加上最后一个字符类是无界的,这绝对是一个奇怪的目标。朋友之间的几十个数量级是多少?Re“这是验证url主机名的正则表达式”,不,不是。例如,它与
www.stackoverflow.com
不匹配。而且,在可观测的星系中只有10^80个原子。我颠倒了集合的顺序,然后颠倒了输出以产生更自然的顺序。如果你不这样做的话,速度会更快,但你似乎有很多时间。
/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/
use strict;
use warnings;
use feature qw( say );

use Algorithm::Loops qw( NestedLoops );

my @char_set1 = ('a'..'z', 'A'..'Z', '0'..'9' );
my @char_set2 = ('a'..'z', 'A'..'Z', '0'..'9', '-');
my @char_set3 = (undef, 'a'..'z', 'A'..'Z', '0'..'9', '-');
my @char_set4 = ('a'..'z', 'A'..'Z');
my @char_set5 = (undef, 'a'..'z', 'A'..'Z');

my $iter = NestedLoops([
   (\@char_set4) x 2,
    ['.'],
   (\@char_set3) x 60,
    \@char_set2,
    \@char_set1,
]);

while (my @chars = $iter->()) {
   say join '', reverse grep defined, @chars;
}