正则表达式 - 如何匹配>电子邮件地址中的第一个标签?

时间:2017-10-31 08:17:36

标签: regex

我需要从电子邮件地址中删除最后一个标记:

foo+bar@baz.com       =>   foo@baz.com
foo+bar+baz@xyz.com   =>   foo+bar@xyz.com
foo@bar.com           =>   foo@bar.com     // no change

这个正则表达式确实有效,但它删除了两个标记,即使它不合适+?

\+{1}(.+?)@{1}

PHP sandbox

我尝试了否定前瞻但它没有按预期工作,仍然删除了两个标记:

\+{1}.+(?!\+).+@{1}

regex101.com

1 个答案:

答案 0 :(得分:2)

您可以使用

\+[^+@]+@

并替换为@

请参阅regex demo

<强>详情

  • \+ - 加号
  • [^+@]+ - 除+@以外的一个或多个字符
  • @ - @(到&#34;锚点&#34;搜索,因此,我们需要用此字符替换)

如果只需要在 last +之前@之后删除该部分,请使用

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

并替换为$1$2。请参阅this regex demo

下面,

  • (.*) - 第1组:尽可能多地捕获任何0+字符
  • \+[^+@]+ - 见上面的图案
  • (@[^@]*$) - 第2组:@,然后是@以外的0 +字符,直到字符串结尾。