构造正则表达式以匹配以下语言
Construct a regular expression to match the following language
我正在做我的教授在讲座结束时分发的思维练习。问题是在给定特定语言定义的情况下构建 DFA。在我构建DFA之前,第一个思考练习是将语言定义转换为正则表达式。
提供的字母表为二进制 {0, 1}
语言定义很不正式:
The language defining the set of binary strings in which every sub-string of length 3 has as least one zero
因此,符合此定义的字符串示例为 000
、001
、1010
等等。
我的麻烦是想出一个正则表达式来匹配这个语言定义。我尝试在 http://regexr.com/ 上玩,但我只发现 '..0' 匹配每三个字符,末尾为零。我不确定如何按照语言定义的方式匹配每个子字符串,或者是否可能。
有没有办法构造这个问题的正则表达式?
需要横向思维。不要为非正式语言定义实现正则表达式,而是为该定义所暗示的 属性。
剧透(将鼠标悬停在上面以获得解决方案):
提示 1:
如果任何任意 3 长度的子串必须有一个 0
-digit,那么不可能连续有 3 个数字是 1
-digits.
提示 2:
这意味着在每个 0
位之间最多有 2 个 1
位。
提示 3:
这使它成为一种语言,在 0-2 1
位之后,可能有无限数量的组,由 0
位和 0-2 1
组成-位数。
解决方案:
^1{0,2}(01{0,2})*$
,或者更数学地讲,^(11?)?(0(11?)?)*$
我正在做我的教授在讲座结束时分发的思维练习。问题是在给定特定语言定义的情况下构建 DFA。在我构建DFA之前,第一个思考练习是将语言定义转换为正则表达式。
提供的字母表为二进制 {0, 1}
语言定义很不正式:
The language defining the set of binary strings in which every sub-string of length 3 has as least one zero
因此,符合此定义的字符串示例为 000
、001
、1010
等等。
我的麻烦是想出一个正则表达式来匹配这个语言定义。我尝试在 http://regexr.com/ 上玩,但我只发现 '..0' 匹配每三个字符,末尾为零。我不确定如何按照语言定义的方式匹配每个子字符串,或者是否可能。
有没有办法构造这个问题的正则表达式?
需要横向思维。不要为非正式语言定义实现正则表达式,而是为该定义所暗示的 属性。
剧透(将鼠标悬停在上面以获得解决方案):
提示 1:
如果任何任意 3 长度的子串必须有一个
0
-digit,那么不可能连续有 3 个数字是1
-digits.
提示 2:
这意味着在每个
0
位之间最多有 2 个1
位。
提示 3:
这使它成为一种语言,在 0-2
1
位之后,可能有无限数量的组,由0
位和 0-21
组成-位数。
解决方案:
^1{0,2}(01{0,2})*$
,或者更数学地讲,^(11?)?(0(11?)?)*$