以a或b开头且不包含ab或ba且以c结尾的正则表达式

问题描述 投票:0回答:1

我想写一个字符串。字符串长度必须至少为 2 个字符。

此外,字符串以“a”或“b”开头,以“c”结尾。

字符串不包含“ab”和“ba”对

我试过了

( (a|b) | [a|b|c]^* ) - ab - ba
但我认为这是错误的。

你能帮我吗?

regex computer-science
1个回答
0
投票

从您的尝试看来,输入语言字母表是 {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$

因此,根据预期的正则表达式风格,进行选择。

© www.soinside.com 2019 - 2024. All rights reserved.