我需要找到所有的电子邮件地址与任意数量的字母数字字,隔一个句号。为了测试regex,我使用网站https://regex101.com/。
有效电子邮件地址的结构是word1.word2.wordN@word1.word2.wordN.word。
regex /[a-zA-Z0-9.]+@[a-zA-Z0-9.]+.[a-zA-Z0-9]+/gm查找文档字符串中包含的所有电子邮件地址,但如果存在,还包括无效地址(如........@....com )。
我试着用圆括号和一个Kleene星对重复的部件进行分组,但是这会导致regex引擎崩溃。
无效regex:
/([a-zA-Z0-9]+.?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+.?)*[a-zA-Z0-9]+.[a-zA-Z0-9]+/gm
虽然有许多关于regex组的帖子,但我无法找到解释,为什么regex引擎会失败。似乎发动机卡住了,同时试图找到匹配的。
我怎样才能避免这个问题,正确的解决办法是什么?
发布于 2021-07-07 15:11:28
我认为给你带来麻烦的主要问题是:
. ([]之外)匹配任何字符,
您可能会指定\. (只匹配文字点字符)。
此外,没有必要使它与?可选,因为您的正则表达式的非点部分将只匹配字母数字字符无论如何。
我还简化了右部分(x*x与x+相同),添加了一个不区分大小写的标志,最后得到如下结果:
/([a-z0-9]+\.)*[a-z0-9]+@([a-z0-9]+\.)+[a-z0-9]+/gmihttps://stackoverflow.com/questions/68287410
复制相似问题