我想写一个字符串。字符串长度必须至少为 2 个字符。
此外,字符串以“a”或“b”开头,以“c”结尾。
字符串不包含“ab”和“ba”对
我试过了
( (a|b) | [a|b|c]^* ) - ab - ba
但我认为这是错误的。
你能帮我吗?
从您的尝试看来,输入语言字母表是 {a,b,c}。
您所描述的规则已在此状态图 (DFA) 中捕获:
中心状态是sink,最右边的状态是接受状态。
在形式语言理论中(使用最小语法),您可以按如下方式编写正则表达式:
( ( 𝑎𝑎* | 𝑏𝑏* ) 𝑐𝑐* ) ( ( 𝑎𝑎* | 𝑏𝑏* ) 𝑐𝑐* )*
在更丰富的正则表达式语法中,您可以使用
+
量词,如下所示:
(?:(?:a+|b+)c+)+
并添加输入开始和输入结束断言,它变成:
^(?:(?:a+|b+)c+)+$
如果输入可以有除
a
、b
和 c
之外的其他符号,那么(仍然没有环视断言)你可以这样做:
^(?:(?:a+|b+)[^ab\n]+)*(?:a+|b+)[^ab\n]*c$
如果环视断言可用,那么这可以简化为:
^(?!.*(?:ab|ba))[ab].*c$
因此,根据预期的正则表达式风格,进行选择。