正则表达式替换,电子邮件正文中的电子邮件地址
问题描述:
我有(许多)电子邮件,其中包含地址如< [email protected]>。正则表达式替换,电子邮件正文中的电子邮件地址
我希望从电子邮件正文中删除<和>,但只有存在和@里面(也有HTML标签,也必须留在身上)。
我可以用这个正则表达式的地址相匹配:
^<.[^@][email protected][^@]+.>$
,但我怎么只用地址替换这一点,并没有<或>?
答
要查找你要使用这样的地址:
(?:<)([^>]*@[^>]*)(?:>)
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;
}
好吧,字符串的字符数组... – 2015-02-10 01:14:58
是否有空格或者你只是使用这些设置尖括号从电子邮件清楚地分开?也就是说,电子邮件地址是这样的:''还是像这样:''?如果是后者,它应该像搜索字边界所示的两个尖括号之间的'@'符号一样简单。 – 2015-02-10 01:20:39