将 FSA 转换为正则表达式

Converting an FSA to a regular expression

今天早上我创建了一个 FSA,旨在验证电子邮件的本地部分。为了自己简化这些事情,我制定了这些规范

'电子邮件地址的本地部分必须使用以下任何一种;大写 A-Z 和小写 a-z 字母、数字 0-9、“+”和点“.”,前提是它们不连续出现。本地部分不得以“+”或点“.”开头或结尾 '

Local Part

很高兴这涵盖了我提出的要求,但是,我无法将其转换为正则表达式。它显然开始于, ^[A-Za-z0-9] 以@$结尾,但之后,我不知道如何构造它。

任何指导将不胜感激。

负前瞻(检查结果.):

^[A-Za-z0-9](?!.*\.\..*)[A-Za-z0-9+.]*[A-Za-z0-9]@$

嗯,如果我理解正确的话,它正在工作

^[A-Za-z0-9][A-Za-z0-9+.]+@$

https://regex101.com/r/MxMMeq/1

^[\w\d]+([+.][\w\d]+)*@$

https://regex101.com/r/MxMMeq/7

将其视为三种不同的状态。您需要从一个或多个 [A-Za-z0-9] 开始,然后可以选择一个点或加号,然后跳回到开始状态,最后在 @.

上接受
^[A-Za-z0-9]+([.+][A-Za-z0-9]+)*@

这实际上不是一个很好的规范;它不允许许多有效的电子邮件地址。您应该参考 RFC5222 中的实际定义。