PHP正则表达式 - 在两个字符之间找到(保留最后一个字符)

时间:2014-01-09 15:03:27

标签: php regex

尝试帮助抓取比赛的独特电子邮件,并让一些人使用gmail +符号技巧来解决它。我正试图通过一种干净的方式过滤电子邮件,以便删除+和@符号之间的所有内容,以便:

  

tester+dn2934u2@gmail.com

变为:

  

tester@gmail.com

到目前为止,我有:

\+(.*?)\@

删除+和@符号。有没有办法(而且我确定有)告诉正则表达式保留@字符所以我不需要重新添加它,替换它,或者其他一些技巧?

http://regex101.com/r/zM8sT3

6 个答案:

答案 0 :(得分:4)

您可以使用:

\+[^@]+(?=@)

(?=@)是一个先行断言(它只是一个检查),意思是后跟@

答案 1 :(得分:3)

您可以使用否定的类:

\+[^@]*

regex101 demo

答案 2 :(得分:2)

只需将@包含在捕获组中:

\+(.*?@)

答案 3 :(得分:1)

您可以使用它来匹配@符号以外的所有内容:

\+[^@]+

完整的PHP代码:

$mail = preg_replace('%\+[^@]+%', '', $mail);

答案 4 :(得分:0)

把它放在选择器中?

eg \+(.*?\@)

答案 5 :(得分:0)

$email_stripped = preg_replace("/^(.+?)(\+.+)?(@.+)$/", "$1$3", $email);