You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式邮箱校验:如何让分组匹配至最后一个@符号之前

嘿,我完全get到你的需求了——就是不管邮箱前缀里夹杂多少个@符号,都要精准捕获最后一个@之前的所有内容对吧?之前用环视没成功大概率是没结合贪婪匹配的特性,我给你两种靠谱的解决方案:

方案1:贪婪匹配+捕获分组

直接用这个正则就能搞定:

^(.*)@
  • ^ 锚定字符串的开头,避免匹配到邮箱域名里的@(不过邮箱域名里本来也不会有@,这个是保险)
  • .* 是贪婪模式的任意字符匹配,它会拼尽全力抓取字符,直到碰到最后一个@符号才停下
  • @ 匹配那个收尾的@符号
  • 你要的内容就在第一个捕获分组里(也就是(.*)抓到的部分),比如:
    • 输入my-email@outlook.com → 分组结果:my-email
    • 输入my-@-email@outlook.com → 分组结果:my-@-email

方案2:用正向环视(Lookahead)实现无分组匹配

如果想用你提到的环视功能,正向预查是绝佳选择,正则如下:

^.*(?=@)
  • (?=@) 是正向预查断言,它只会检查当前位置的后面紧跟的是@,但不会把@包含到最终的匹配结果里
  • 同样依赖.*的贪婪特性,它会一直匹配到最后一个满足“后面是@”的位置,直接返回你需要的前缀内容,连分组都不用额外提取

为啥之前用环视可能失败?

大概率是你不小心用了非贪婪模式(.*?),比如如果写成^.*?(?=@),它会匹配到第一个@之前的内容,这就和你的需求背道而驰了。记住:要抓最后一个匹配项,就用贪婪的.*;要抓第一个,才用非贪婪的.*?。

内容的提问来源于stack exchange,提问作者Devbizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:29