正则表达式替换,电子邮件地址从电子邮件正文

时间:2015-02-10 01:14:22

标签: php regex email

我有(很多)电子邮件,其中包含< asd@somewhere.co>在体内。

我希望删除<和>来自电子邮件正文,但只有在哪里和@ inside(在正文中也有HTML标签,必须保留)。

我可以将地址与此正则表达式匹配:

^<.[^@]+.@.[^@]+.>$

,但是如何用地址替换它并且没有&lt;或者&gt; ?

3 个答案:

答案 0 :(得分:3)

应该这样做......

<?php
$string = '< asd@somewhere.co >';
echo preg_replace('~<\s*(.*?@.*?)\s*>~', '$1', $string);
?>

搜索&#39;大于&#39;,可选的前导空格,每个字符直到第一个@,然后搜索每个字符,直到第一个字符小于&#39;,并带有可选的尾随空格。

答案 1 :(得分:2)

要搜索您想要使用的地址:

(?:<)([^>]*@[^>]*)(?:>)

Please see Regex 101 here.我正在使用非捕获组作为尖括号,因此实际上只捕获它们之间的内容(而且我没有使用特别好的正则表达式来处理电子邮件,但这应该很容易调整)。

您应该能够将上述内容与preg_replace_all()$1反向引用一起使用。

答案 2 :(得分:1)

  

我有(很多)电子邮件,其中包含&lt; asd@somewhere.co&gt;   在体内。

     

我希望删除&lt;和&gt;来自电子邮件正文,但只在那里   是和@ inside(身体中也有HTML标签,必须   留)。

简单。这个概念被称为切片。

$email = '<asd@somewhere.co>';


if( strpos( $email, '@' ) ) {

    $new_email = substr( $email, 1, strlen($email)-2 );
    echo $new_email;
}

输出:asd@somewhere.co