从语言生成正则表达式

Generating a regular expression from a language

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

接受的字符串:0001000100

拒绝的字符串:100010100

我目前的尝试是:((0*)(1){0,1}(0*)){4}。尽管根据各种正则表达式测试网站的说法是不正确的,但我并不感到惊讶,因为我是正则表达式的新手。

我相信这种语言是正则的,因此我被要求找到一个正则表达式来定义它,以及 NFA 和 DFA,每个我都接受的过程。但是,我正在努力想出一个定义语言的正则表达式。

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

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

解释:

  • ^ - 字符串开始
  • 0* - 一个或多个零
  • (?:10{3,})* - 这匹配文字 1 然后至少三个或更多零和整个它零次或更多次
  • 1?0* - 可选地跟在文字 1 之后,然后是零个或多个零
  • $ - 字符串结束

Demo