我有(很多)电子邮件,其中包含< asd@somewhere.co>在体内。
我希望删除<和>来自电子邮件正文,但只有在哪里和@ inside(在正文中也有HTML标签,必须保留)。
我可以将地址与此正则表达式匹配:
^<.[^@]+.@.[^@]+.>$
,但是如何用地址替换它并且没有&lt;或者&gt; ?
答案 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