【问题标题】:Regular Expression for no. of 0s and 1s odd in the string没有的正则表达式。字符串中奇数的 0 和 1
【发布时间】:2015-08-14 22:11:08
【问题描述】:

因为我们可以在 {0,1} 上开发像以 01 结尾的字符串这样的正则表达式 喜欢 (0+1)*01

所以在 {0,1} 上,我想要回答我的问题,即 0 和 1 的数量都是奇数的正则表达式是什么

1 和 0 的任意组合都可以。

【问题讨论】:

  • 您没有在您的问题上放置合理的标签,以帮助具有适当知识的人找到您的问题。我已经为你做到了;但是,您的问题可能与编程无关,而是计算机科学课上的练习。也许你在cs.stackexchange.com 会更好。您还应该搜索其他类似的问题。这是一个常见的问题,我怀疑你的答案已经存在了。
  • 您在寻找奇数长度吗?

标签: regex computer-science regular-language


【解决方案1】:

首先用有限状态机解决这个问题,然后将 FSM 转换为正则表达式(这总是可能的)。您可以构造一个具有四种状态的 FSM:偶数、奇数、1s 偶数和 0s 奇数,以及 0s 偶数和 1s 奇数。从“均等”状态开始,并以明显的方式移动; “都奇数”是唯一的接受状态。

有关转换,请参阅https://cs.stackexchange.com/q/2016/1531

【讨论】:

  • 我知道我们可以从 FSM 生成正则表达式。但在这种情况下,它不适用于我,这就是我问的原因。可以画出它的 FSM 但不能根据我创建正则表达式
【解决方案2】:

“x”的一般“奇数”计数是 (([^x]*x){2})*[^x]*x[^x]*。在这种表达式中使用两次前瞻来断言字符 1 和 0 都出现了奇数次:

^(?=(0*10*1)*0*10*$)(?=(1*01*0)*1*01*$).*

live demo

正则表达式基本上是 2 个 look aheads,其形式为 (?=...)(其中 ... 是一个表达式)和 assert(不消耗)输入以下匹配表达式。因为它不消耗输入,也不移动指针,所以您可以在同一点进行多次前瞻。

【讨论】:

  • 你的表达式不工作..它生成了这么多不应该用语言的错误字符串
  • @himavyas 请给出错误匹配输入的例子。
  • 我可以从上半场生成 111.. 从下半场开始,字符串 111111 仍然无效,仍然由该表达式生成
  • 我得到了一个.. 111 不能被接受,因为这里 1 的数量是奇数,但 0 的数量是偶数(因为据说没有出现是偶数)。
  • @himavyas 但111111 与我的正则表达式不匹配 - see demo。您是否完全复制粘贴了我的正则表达式?您使用的是哪种正则表达式引擎/语言?
猜你喜欢
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多