正则表达式是否包含恰好包含两次“ aa”的所有字符串?

时间:2018-09-08 08:43:49

标签: regex

这是计算理论的一个简单问题。 我不知道也不希望用python编码的解释,而是表达的理论答案。 我已尽力找出了答案,并提出了以下代码:

 (ab+ba+bb)*. aa.(ab+ba+bb)*.aa.(ab+ba+bb)* + b*.aa.b*.aa.b*

对吗?我会忘记其他情况吗?

1 个答案:

答案 0 :(得分:3)

您的正则表达式太复杂且不够灵活(仅适用于a和b的字符串)。更好的解决方案使用否定的前瞻性断言:

^(?:(?!aa).)*aa(?:(?!aa).)*aa(?:(?!aa).)*$

这会在不包含aa的字符串开始处查找子字符串的任何长度,然后是第一个aa,以此类推。