如何生成正则表达式的匹配?

如何生成正则表达式的匹配?

有没有一种工具可以接受正则表达式参数并输出有效组合?应该有创建一个与正则表达式匹配的字符串。

例如:

  • clear
    • clear
  • ls (-[al]{2}|-a -l|-l -a)
    • ls -al
    • 或者ls -a -l

答案1

选择以下任一方法这个 Stack Overflow 问题,并使用 Python 运行它。例如:

$ python -c 'import rstr; print(rstr.xeger("ls (-[al]{2}|-a -l|-l -a)"))'
ls -a -l

您可能需要pip installrstr 模块。

答案2

我不知道有任何工具可以满足您的需求 - 事实上,如果有的话我会感到惊讶 - 它应该如何处理包含通配符的表达式(例如.*- 您希望它输出所有可能的字符吗?)

最接近的可能是某种正则表达式解析器这将为你生成一个解析树,然后你需要从根节点到叶子节点遍历它(如果你想到达每个可能的叶子节点,则需要根据需要进行备份)。类似于 perl 的YAPE::正则表达式例如模块——事实上,你可以基于YAPE::Regex::解释扩大:

$ printf '(-[al]{2}|-a -l|-l -a)' | 
    perl -MYAPE::Regex::Explain -ne 'print YAPE::Regex::Explain->new($_)->explain'
The regular expression:

(?-imsx:(-[al]{2}|-a -l|-l -a))

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    -                        '-'
----------------------------------------------------------------------
    [al]{2}                  any character of: 'a', 'l' (2 times)
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    -a -l                    '-a -l'
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    -l -a                    '-l -a'
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

(我不知道为什么它将表达式包装在一个额外的(?:...)非捕获组中)。

不幸的是,该模块似乎无法从 Ubuntu 存储库获得,但您应该能够通过 CPAN 安装它。

相关内容