正则表达式 - 不包含连续大写字母的驼峰式大小写

regex - camel case that doesnt contain consecutive uppercase letters

考虑以下标识符说明:“标识符是字母数字,但必须以 一个小写字母,不能包含连续的大写字母。” 编写接受这些标识符的 DFA。

这是我将用来转换为 DFA 的正则表达式,但我认为它不正确

[a-z].( ([a-z0-9] | [a-z0-9][A-Z])* | ([a-z0-9] | [A-Z][a-z0-9])* )

我认为正确的正则表达式是:

    ^[a-z][A-Z]?(([a-z0-9][A-Z]?))*$

第一个:小写(或数字) 结束后:无限小写大写?小写大写?小写大写?...

PS:如果你在正则表达式中写一个点,它将匹配任何字符。要匹配文字 .,请使用 [.]\..

S -> [a-z] A
A -> [a-z0-9] A
A -> [A-Z] B
B -> [a-z0-9] A

S - 起始状态
A、B - 最终状态