Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-如何匹配>;电子邮件地址中的第一个标记?_Regex - Fatal编程技术网

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

Regex 正则表达式-如何匹配>;电子邮件地址中的第一个标记?,regex,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 这个正则表达式可以工作,但它会删除这两个标记,即使它是ungreedy+?: \+{1}(.+?)@{1} 我尝试了反向前瞻,但它没有按预期工作,仍

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

foo+bar@baz.com       =>   foo@baz.com
foo+bar+baz@xyz.com   =>   foo+bar@xyz.com
foo@bar.com           =>   foo@bar.com     // no change
这个正则表达式可以工作,但它会删除这两个标记,即使它是ungreedy
+?

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

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

\+{1}.+(?!\+).+@{1}
您可以使用

\+[^+@]+@
并替换为
@

详细信息

  • \+
    -一个加号
  • [^++]+
    -1个或多个字符,而不是
    +
    @
  • @
    -a
    @
    (为了“锚定”搜索,我们需要用这个字符替换)
如果要求仅在最后一个
@
之前的
+
之后移除该零件,请使用

(.*)\+[^+@]+(@[^@]*$)
并替换为
$1$2
。看

这里,

  • (.*)
    -组1:尽可能多地捕获任何0+个字符
  • \+[^++]+
    -参见上面的模式
  • (@[^@]*$)
    -第2组:a
    @
    ,然后0+个字符,而不是
    @
    ,直到字符串结束