【问题标题】:Automata - Regular Expression自动机 - 正则表达式
【发布时间】:2015-11-19 13:08:53
【问题描述】:

我一直在尝试从下面创建一个正则表达式:

L = {01, 0011, 000111, 00001111, 0000011111, 000000111111, ...}

但我就是想不通。我首先想到的是

0(0)^* 1(1)^*

有可以测试的应用吗?

如果这不能通过正则表达式完成,是否可以通过 NFA 或 DFA 完成?

但我不确定这是否是语言的答案。一些好心的撒玛利亚人能帮我解决这个问题吗?欣赏它。

【问题讨论】:

  • @Cyrbil +1 for regex101,但我认为输入的 0 和 1 必须相同,即 00111 不应该匹配。
  • @Cyrbil 应该是[01]+
  • @hek2mgl 例如,这允许 110010100。
  • @sp00m 可能我没有得到这个问题。 L = 代表什么?

标签: regex automation regular-language


【解决方案1】:

subroutine 可能适合您的需求:

(?<!0)(0(?1)?1)(?!1)

Debuggex Demo

(?1) 表示回忆在第一组中捕获的模式,即在括号之间。不过,这并非在所有正则表达式引擎中都可用 - 顺便说一下,(?&lt;!...) 的(负)lookbehind 也不是。

(?1)\1 之间的区别在于(?1) 调用捕获的模式,而\1 调用捕获的数据

【讨论】:

  • 我正在努力获得长度匹配,这太棒了!
  • 几乎...请检查regex101.com/r/cN9aL8/2 ..您可以像这样添加单词边界:regex101.com/r/cN9aL8/3。无论如何,很好的答案!
  • 知道如何在 Python 中执行这个精确的子程序吗?
【解决方案2】:

我不知道你说它应该是正则表达式是什么意思,因为它也提到了自动机/正则表达式。

根据自动机理论:-

如果您说的是这种形式语言的正则表达式(0 和 1 的数量相等,并且所有 0 后面必须跟 1),它不是正则语言。可以使用抽水引理证明这种语言是不规则的。

但是,这种语言可以表示为 {0i1i | i>0}; i 属于正整数集合。

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多