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

PHP正则表达式匹配特定格式邮箱字符串的问题求助

PHP正则表达式匹配特定格式邮箱字符串的问题求助

嘿,我来帮你捋捋这个问题!你想要精准抓取"email":"email@domain.com"这种格式绑定的邮箱,但当前的正则表达式跑偏了,会抓到其他不相关的邮箱,对吧?

先说说你原来的正则哪里出问题了:["email":"]+这个部分的逻辑是匹配任意数量(至少1个)的双引号、e、m、a、i、l、冒号这些字符的任意组合,而不是精确匹配"email":"这个固定前缀。举个例子,它甚至会匹配"e:mail"这种混乱的字符串,这肯定不是你想要的结果。

那该怎么调整呢?我们需要先精准锁定"email":"这个前缀,再匹配标准的邮箱格式。这里给你改好的代码和正则:

function find_email_schema($str){
    preg_match_all('/"email":"([\w\.-]+@[\w\.-]+\.\w+)"/i', $str, $matches);
    return $matches[1]; // 只返回捕获到的纯邮箱内容,而非整个匹配串
}

我拆解下这个正则的关键部分:

  • "email":":精确匹配你需要的固定前缀,确保只有和这个前缀绑定的邮箱才会被捕获
  • ():捕获组,专门用来提取我们真正需要的邮箱主体部分
  • [\w\.-]+:匹配邮箱用户名,\w覆盖字母、数字、下划线,加上.和-,适配常见的用户名格式
  • @:匹配邮箱必备的@符号
  • [\w\.-]+:匹配域名的主体部分
  • \.\w+:匹配域名后缀(比如.com、.org、.co.uk这类)
  • /i:不区分大小写,邮箱本身通常大小写不敏感,这个保留没问题

举个测试场景,如果你的输入字符串是:

{"name":"John", "email":"john@example.com", "other":"jane@test.org", "email":"bob+tag@domain.co.uk"}

用这个函数会返回数组:["john@example.com", "bob+tag@domain.co.uk"],刚好是你要的和"email":"绑定的邮箱,不会误抓jane@test.org。

要是你需要支持更复杂的邮箱格式(比如带加号、特殊字符的),可以把邮箱部分的正则换成更贴合RFC标准的写法,但上面的版本已经能覆盖绝大多数常见场景啦。

备注:内容来源于stack exchange,提问作者Alex Douglas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:57:58