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

是否有一个工具可以采用正则表达式参数并吐出有效的组合? 它应该创建一个匹配正则表达式的字符串。

例如:

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

从Stack Overflow问题中选择任何方法,并使用Python运行它。 例如:

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

您可能必须pip install rstr模块。

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

可能最接近的是某种正则表达式deparser ,它会为你生成一个解析树,然后你需要从根遍历到叶子(如果你想要到达每个可能的叶子节点,必要时进行备份)。 像perl的YAPE :: Regex模块之类的东西 – 实际上你可能能够将你的解决方案建立在YAPE :: Regex :: explain扩展上:

 $ 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安装它。