我需要解析电子邮件自定义电子邮件地址,这些地址都符合以下类似的格式:
custom.name+1234@my.custom.domain
我需要一个正则表达式来捕获加号(+)之前的所有内容,加号之后的数字以及@符号之后的内容。电子邮件可以通过,也没有加号(+)。
我的第一个基本尝试看起来像这样,但显然是错误的:
preg_match('#([A-Za-z0-9._])+([\d])@(.*)#', 'customemail+123@domain.com', $matches);
答案 0 :(得分:2)
问题是方括号表示单个字符。
如果你想允许多个这样的东西,你需要一个量词,如*为零或更多,或+为1或更多。
你需要转义加号,因为它用于我已经描述过的目的。另外我们需要使用?标记为可选?量词(表示零或一)。
所以我们最终得到的结果是:
'#([A-Za-z0-9._]+)\+?([\d]*)@(.*)#'
希望有所帮助
答案 1 :(得分:0)
我使用这个正则表达式:
'/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/'
但是如果只与2-4长度的tld兼容。因此它与“.company”等新的tld不兼容......所以如果你想与更长的tld兼容,只需将{2,4}更改为{2,10},最大长度为10个字符(只需使用长度)你想要的最长的tld。
答案 2 :(得分:0)
我会这样做:
([\w.]+)(?:\+(\d+))?@(.*)
组1将包含名称
第2组将包含+号后面的数字
第3组将包含域名。