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

问题描述:

我有(许多)电子邮件,其中包含地址如< [email protected]>。正则表达式替换,电子邮件正文中的电子邮件地址

我希望从电子邮件正文中删除<和>,但只有存在和@里面(也有HTML标签,也必须留在身上)。

我可以用这个正则表达式的地址相匹配:

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

,但我怎么只用地址替换这一点,并没有<或>?

+0

好吧,字符串的字符数组... – 2015-02-10 01:14:58

+0

是否有空格或者你只是使用这些设置尖括号从电子邮件清楚地分开?也就是说,电子邮件地址是这样的:''还是像这样:''?如果是后者,它应该像搜索字边界所示的两个尖括号之间的'@'符号一样简单。 – 2015-02-10 01:20:39

要查找你要使用这样的地址:

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

Please see Regex 101 here.我使用非捕获组的尖括号所以只有它们之间有什么实际上将被捕获(和我没有使用特别好的电子邮件正则表达式,但应该很容易调整)。

您应该可以使用上面的preg_replace_all()$1反向引用。

这应该这样做...

<?php 
$string = '<[email protected]>'; 
echo preg_replace('~<\s*(.*[email protected]*?)\s*>~', '$1', $string); 
?> 

搜索“大于”,可选的前导空格,每个字符,直到第一个@,然后每一个字符,直到第一个“小于”,带有可选尾随空白。

我有(很多)电子邮件,其中包含像< [email protected]> 地址内的地址。

我希望从邮件正文删除<和>,但只有在有 是和@里面(有HTML标签在体内过多,必须 住宿)。

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

$email = '<[email protected]>'; 


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

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

输出:[email protected]