使用正则表达式打印字母数字字符

414

我是新来的正则表达式。

我需要按照以下模式打印所有组合的8个字符(字母数字)。

  • 第一个字符必须是字母
  • 第二个字符必须是数字
  • 不得连续3个数字字符
  • 不得连续4个字母字符
池上

正则表达式用于定义语法。匹配和替代运算符检查字符串是否与使用正则表达式定义的语法模式匹配。我不知道使用正则表达式模式生成字符串的任何工具。


当您有任意数量的嵌套循环时,就需要Algorithm :: LoopsNestedLoops在您的情况下,循环的数量是固定的,但是NestedLoops无论如何,有用的循环太多了。

[我假设您只对ASCII中的字母和数字感兴趣。]

天真(生成所有序列,并过滤掉不需要的序列):

use Algorithm::Loops qw( NestedLoops );

my @syms = ('A'..'Z', 'a'..'z', '0'..'9');

my $iter = NestedLoops([ (\@syms) x 8 ]);

while (my @s = $iter->()) {
   my $s = join('', @s);
   next if $s !~ /^[a-zA-Z][0-9]/;
   next if $s =~ /[a-zA-Z]{4}|[0-9]{3}/;
   say $s;
}

大多数情况下是天真的(生成所有序列,除了明显不好的序列,然后过滤掉不需要的序列):

use Algorithm::Loops qw( NestedLoops );

my @letters = ('A'..'Z', 'a'..'z');
my @digits  = ('0'..'9');
my @syms    = (@letters, @digits);

my $iter = NestedLoops([
   \@letters,
   \@digits,
   (\@syms) x 6,
]);

while (my @s = $iter->()) {
   my $s = join('', @s);
   next if $s =~ /[a-zA-Z]{4}|[0-9]{3}/;
   say $s;
}

但这仍然会产生很多需要丢弃的字符串。以下仅生成我们想要的字符串。它通过产生,将产生所希望的字符串的图案(LDLLLDLLLDLLLDLDLDLLLDDLLDLLDLLL,...),然后建立从这些模式字符串。

高效的算法(这并不意味着实现是有效的):

use Algorithm::Loops qw( NestedLoops );

my @letters = ('A'..'Z', 'a'..'z');
my @digits  = ('0'..'9');

sub make_pat_gen_iter {
   my $raw_pat_gen_iter = NestedLoops([
      ['L'],
      ['D'],
      (['L','D']) x 6,
   ]);

   return sub {
      while (1) {
         my @pat = $raw_pat_gen_iter->();
         return () if !@pat;

         my $pat = join('', @pat);
         next if $pat =~ /L{4}|D{3}/;

         return @pat;
      }
   };
}

sub make_gen_iter {
   my $pat_gen_iter = make_pat_gen_iter();
   my @pat;

   my $gen_sub_iter;

   return sub {
      return () if !$pat_gen_iter;

      while (1) {
         if (!$gen_sub_iter) {
            @pat = $pat_gen_iter->();
            if (!@pat) {
               $pat_gen_iter = undef;
               return ();
            }

            $gen_sub_iter = NestedLoops([
               map { $_ eq 'L' ? \@letters : \@digits } @pat
            ]);
         }

         my @s = $gen_sub_iter->();
         if (!@s) {
            $gen_sub_iter = undef;
            next;
         }

         return join('', @s);
      }
   };
}

my $gen_iter = make_gen_iter();

while (defined( my $s = $gen_iter->() )) {
   say $s;
}

有趣的是,以下是模式迭代器的完整结果:

LDLLLDLL    LDLLLDLD    LDLLLDDL    LDLLDLLL    LDLLDLLD
LDLLDLDL    LDLLDLDD    LDLLDDLL    LDLLDDLD    LDLDLLLD
LDLDLLDL    LDLDLLDD    LDLDLDLL    LDLDLDLD    LDLDLDDL
LDLDDLLL    LDLDDLLD    LDLDDLDL    LDLDDLDD    LDDLLLDL
LDDLLLDD    LDDLLDLL    LDDLLDLD    LDDLLDDL    LDDLDLLL
LDDLDLLD    LDDLDLDL    LDDLDLDD    LDDLDDLL    LDDLDDLD

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式匹配python中的字母数字字符列表

来自分类Dev

使用正则表达式捕获字母数字字符串

来自分类Dev

使用 Python 替换正则表达式匹配中的非字母数字字符

来自分类Dev

如何使用正则表达式用空格替换非字母数字字符?

来自分类Dev

使用正则表达式检测字母数字字符串的范围

来自分类Dev

正则表达式用于字母数字字符串中的数字计数

来自分类Dev

用于字母数字字符和数字范围组合的正则表达式

来自分类Dev

如何使用正则表达式从字符串中删除所有非字母数字字符(“#”除外)?

来自分类Dev

数字字符串中的单个字母字符的正则表达式语法

来自分类Dev

正则表达式可以匹配字母数字字符或连字符以外的任何内容

来自分类Dev

字母数字字符和下划线和字符限制的正则表达式

来自分类Dev

10 个字符的字母数字字符串的正则表达式

来自分类Dev

接受字母字符或字母数字字符或带特殊符号的字母字符的正则表达式

来自分类Dev

django表单字段正则表达式验证字母数字字符

来自分类Dev

正则表达式用于剥离非字母和非数字字符

来自分类Dev

正则表达式,用于字母数字字符以及方括号和空格

来自分类Dev

VBA正则表达式,包含逗号,破折号和字母数字字符

来自分类Dev

Java正则表达式匹配字母数字字符串

来自分类Dev

带字母数字字符串的Grep正则表达式

来自分类Dev

不包含字母数字字符的单词的正则表达式

来自分类Dev

正则表达式与非字母数字字符完全匹配

来自分类Dev

Python正则表达式搜索字母数字字符和正斜杠

来自分类Dev

正则表达式,用于字母/数字字符,空格和破折号

来自分类Dev

正则表达式考虑$以外的非字母数字字符

来自分类Dev

PHP正则表达式检查字母数字字符串

来自分类Dev

Java正则表达式匹配字母数字字符串

来自分类Dev

正则表达式-拒绝所有字母数字字符串

来自分类Dev

最多包含空格的字母数字字符串的正则表达式

来自分类Dev

通过正则表达式替换删除非字母数字字符

Related 相关文章

  1. 1

    使用正则表达式匹配python中的字母数字字符列表

  2. 2

    使用正则表达式捕获字母数字字符串

  3. 3

    使用 Python 替换正则表达式匹配中的非字母数字字符

  4. 4

    如何使用正则表达式用空格替换非字母数字字符?

  5. 5

    使用正则表达式检测字母数字字符串的范围

  6. 6

    正则表达式用于字母数字字符串中的数字计数

  7. 7

    用于字母数字字符和数字范围组合的正则表达式

  8. 8

    如何使用正则表达式从字符串中删除所有非字母数字字符(“#”除外)?

  9. 9

    数字字符串中的单个字母字符的正则表达式语法

  10. 10

    正则表达式可以匹配字母数字字符或连字符以外的任何内容

  11. 11

    字母数字字符和下划线和字符限制的正则表达式

  12. 12

    10 个字符的字母数字字符串的正则表达式

  13. 13

    接受字母字符或字母数字字符或带特殊符号的字母字符的正则表达式

  14. 14

    django表单字段正则表达式验证字母数字字符

  15. 15

    正则表达式用于剥离非字母和非数字字符

  16. 16

    正则表达式,用于字母数字字符以及方括号和空格

  17. 17

    VBA正则表达式,包含逗号,破折号和字母数字字符

  18. 18

    Java正则表达式匹配字母数字字符串

  19. 19

    带字母数字字符串的Grep正则表达式

  20. 20

    不包含字母数字字符的单词的正则表达式

  21. 21

    正则表达式与非字母数字字符完全匹配

  22. 22

    Python正则表达式搜索字母数字字符和正斜杠

  23. 23

    正则表达式,用于字母/数字字符,空格和破折号

  24. 24

    正则表达式考虑$以外的非字母数字字符

  25. 25

    PHP正则表达式检查字母数字字符串

  26. 26

    Java正则表达式匹配字母数字字符串

  27. 27

    正则表达式-拒绝所有字母数字字符串

  28. 28

    最多包含空格的字母数字字符串的正则表达式

  29. 29

    通过正则表达式替换删除非字母数字字符

热门标签

归档