以下条件的正则表达式
Regex for following condition
为由 Σ = {0, 1} 上的字符串集组成的语言创建一个正则表达式
即 输入是一个仅包含 1 或 0 的字符串。我们必须在二进制字符串中搜索。
这样语言中的每个字符串都是:
(a) 有 5 个连续的 0 序列,或
(b) 具有奇数个连续 1 的序列,在某个点后跟偶数个连续 1 的序列。
因此 00000、000000、11100000、11111 和 10011 将在该语言中,
但 110000 不会。
^[01]*0{5,}[01]*|[01]*11$
对于(a)它应该匹配,但是(b)我不是很清楚,是否意味着以11
结尾?
您必须连接 2 个正则表达式:
0{5}
: 匹配5个连续的0
和
^1(?:11)*0*(?:11)*0*$
将他们分组:
0{5}|^1(?:11)*0*(?:11)*0*$
解释:
^ : start of string
1 : a 1
(?: : start non capture group
11 : that contains two 1
)* : repeated 0 or more times, after that you have an odd number of 1
0* : 0 or more 0
(?: : start non capture group
11 : that contains two 1
)* : repeated 0 or more times, you then have an even number of 1
0* : 0 or more 0
$ : end of string
为由 Σ = {0, 1} 上的字符串集组成的语言创建一个正则表达式 即 输入是一个仅包含 1 或 0 的字符串。我们必须在二进制字符串中搜索。
这样语言中的每个字符串都是:
(a) 有 5 个连续的 0 序列,或
(b) 具有奇数个连续 1 的序列,在某个点后跟偶数个连续 1 的序列。
因此 00000、000000、11100000、11111 和 10011 将在该语言中, 但 110000 不会。
^[01]*0{5,}[01]*|[01]*11$
对于(a)它应该匹配,但是(b)我不是很清楚,是否意味着以11
结尾?
您必须连接 2 个正则表达式:
0{5}
: 匹配5个连续的0
和
^1(?:11)*0*(?:11)*0*$
将他们分组:
0{5}|^1(?:11)*0*(?:11)*0*$
解释:
^ : start of string
1 : a 1
(?: : start non capture group
11 : that contains two 1
)* : repeated 0 or more times, after that you have an odd number of 1
0* : 0 or more 0
(?: : start non capture group
11 : that contains two 1
)* : repeated 0 or more times, you then have an even number of 1
0* : 0 or more 0
$ : end of string