0

不使用“扩展”正则表达式运算符,例如 {}、?、^ 和 +,使用| () * 和 concat,如果语言中的唯一字符是 0 和 1,正则表达式如何找到长度为 4 或更短的所有字符串?

正则表达式应匹配:

0 或 1

10 或 01

111 或 110 或其他长度 3 个字符串

0011 或 0010 或其他长度为 4 的字符串

但不是 01101 或任何 5 或更长的字符串。

我能够为该语言绘制一个确定性的有限状态自动机,但未能成功确定正则表达式。

我的猜测是它不能使用 * 并且类似于 (0|1)(0|1)(0|1)(0|1) 但我没有办法制作最后三组括号可选的。

编辑:这是一个家庭作业问题

4

2 回答 2

1

这可以通过这个正则表达式轻松实现:^[01]{1,4}$. 我不明白为什么不想{}在正则表达式中使用。

[01]将允许这两个数字之一,并{1,4}声明可能只有 1 到 4 个零或一。^$指明字符串的开始和结束。


如果你仍然不想使用{},你可以这样做:

^(([01][01][01][01])|([01][01][01])|([01][01])|([01]))$

如果您也不允许使用[],则可以使用此正则表达式。

^(((0|1)(0|1)(0|1)(0|1))|((0|1)(0|1)(0|1))|((0|1)(0|1))|((0|1)))$
于 2013-02-01T05:41:01.790 回答
0

(0|1)|(00|01|10|11)|(000|001|010|011|100|101|110|111)|(0000|0001|0010|0011|0100|0101|0110|0111 |1000|1001|1010|1011|1100|1101|1110|1111)

于 2013-02-01T06:13:59.950 回答