从语言生成正则表达式

时间:2019-02-21 16:38:38

标签: regex regular-language lexical-analysis dfa nfa

我需要找到一个正则表达式来定义所有二进制字符串的语言,该字符串在长度为4的每个子字符串中最多为1

接受的字符串:0001000100

拒绝的字符串:100010100

我当前的尝试是:((0 *)(1){0,1}(0 *)){4} 。尽管对于每个正则表达式测试站点而言,这都是不正确的,但我对正则表达式并不陌生,这并不奇怪。

我认为该语言是常规语言,因此,我被要求寻找一个正则表达式来定义它,以及NFA和DFA可以确定的每种语言的流程。但是,我正在努力提出一个定义该语言的正则表达式。

1 个答案:

答案 0 :(得分:0)

此正则表达式似乎定义了您想要的语言,在四个字符中不会出现两个1。

^0*(?:10{3,})*1?0*$

说明:

  • ^-字符串的开头
  • 0*-一个或多个零
  • (?:10{3,})*-匹配文字1,然后匹配至少三个或多个零,并且整个零或多次
  • 1?0*-(可选)在文字1之后,然后是零个或多个零点。
  • $-字符串结尾

Demo