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

PHP正则表达式-在两个字符之间查找(保留最后一个字符),php,regex,Php,Regex,试图帮助抓取比赛的独特电子邮件,并让一些人使用gmail+符号技巧绕过它。我正在尝试一种干净的方法来过滤电子邮件,这样它就可以删除+和@符号之间的所有内容,以便: 测试员+dn2934u2@gmail.com 变成: tester@gmail.com 到目前为止,我已经: \+(.*?)\@ 这将删除+和@符号。有没有办法(我肯定有办法)告诉正则表达式保留@字符,这样我就不需要重新添加、替换或其他一些技巧 您可以改为使用否定类: \+[^@]* 您可以使用以下功能: \+[^@]+(?=@)

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

测试员+dn2934u2@gmail.com

变成:

tester@gmail.com

到目前为止,我已经:

\+(.*?)\@
这将删除+和@符号。有没有办法(我肯定有办法)告诉正则表达式保留@字符,这样我就不需要重新添加、替换或其他一些技巧


您可以改为使用否定类:

\+[^@]*

您可以使用以下功能:

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

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

把它放在选择器中

eg \+(.*?\@)

只需将@加入捕获组:

\+(.*?@)

您可以使用此选项匹配除@符号以外的所有内容:

\+[^@]+
完整的php代码:

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

没有必要用“\`”来转义
@
——它不是一个元字符。只是想让你知道这不是gmail独有的。gmail独有的一件事是句号。你可以在你的电子邮件中的任何地方加上句号,它是有效的。所以如果你的电子邮件是johndoe@gmail.com你也可以用约翰。doe@gmail.com-所以你可能也想检查一下这些是否是“骗子”。谢谢杰西卡,我不知道!这并不意味着他们是骗子。很可能真的有人发过类似的电子邮件……除了@Jessica的评论,可能值得一读。你应该使用代码格式(并习惯于此)要设置正则表达式的格式,从而使您的答案更好:要么用两个
`
将其括起来,要么将其放在四个空格和一个空行前面的新行中。有关更多详细信息,请参阅。
$email_stripped = preg_replace("/^(.+?)(\+.+)?(@.+)$/", "$1$3", $email);