【问题标题】:Find all matching strings of a regular expression (without + and * operator)查找正则表达式的所有匹配字符串(不带 + 和 * 运算符)
【发布时间】:2011-11-14 11:21:40
【问题描述】:

我想枚举一个正则表达式匹配的所有可能的字符串。 我想匹配的所有正则表达式都没有*+,只有x*{5} 等价于x?x?x?x?x?

所以给定任何正则表达式,如下所示:

[a-c]?cdr*{0,2}

我想要所有匹配表达式的字符串。因此库或程序应输出如下内容:

cd, acd, bcd, ccd, cdr, acdr, bcdr, ccdr, cdrr, acdrr, bcdrr, ccdrr

只要它在 linux 中运行,我不关心它是用什么语言实现的。

细化:如果将正则表达式转换为确定性有限自动机,则自动机必须可表示为有向无环图。这就是为什么可能的输出字符串必须是可枚举的(不是无限长的字符串)。

【问题讨论】:

  • @Mithun:链接的问题与这个完全无关?
  • 这个更接近你想要的stackoverflow.com/questions/1248519/…
  • 你的问题没有意义。您的“正则表达式”最多包含 3 个字符,除非我弄错了,但您的结果有超过三个字符?
  • @Alex 好的,现在我明白你的意思了。所以我认为 [abc]?cdr{0,2} 是你需要的。

标签: regex


【解决方案1】:

我认为这个 Java 库将帮助您解决这个问题 http://code.google.com/p/xeger/,因为它是 Java,它也可以在 Linux 上运行。

【讨论】:

  • 啊这看起来很有前途,我会在测试它是否满足我的要求后立即接受。
【解决方案2】:

这里是这个问题的python解决方案:https://github.com/asciimoo/exrex

它也处理 * 和 + 运算符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2017-08-29
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2021-11-10
    相关资源
    最近更新 更多