我有(许多)电子邮件,其中包含<asd@somewhere.co>身体内部。
我希望删除<和>,但只在里面有和@的地方(正文中也有HTML标记,必须保留)。
我可以用这个正则表达式匹配地址:
^<.[^@]+.@.[^@]+.>$
,但是我如何将其仅替换为地址而不<或>?
这应该做到…
<?php
$string = '< asd@somewhere.co >';
echo preg_replace('~<'s*(.*?@.*?)'s*>~', '$1', $string);
?>
搜索"大于"、可选的前导空格、直到第一个@的每个字符,然后搜索直到第一个"小于"的每个字符以及可选的尾随空格。
要搜索地址,您需要使用以下内容:
(?:<)([^>]*@[^>]*)(?:>)
请参阅此处的Regex 101。我在尖括号中使用了非捕获组,所以只有它们之间的内容才会被捕获(我在电子邮件中没有使用特别好的正则表达式,但这应该很容易调整)。
您应该能够将以上内容与preg_replace_all()
和$1
反向引用一起使用。
我有(许多)电子邮件,其中包含类似<asd@somewhere.co>体内。
我希望删除<和>,但仅限于is和@inner(正文中也有HTML标记,必须停留)。
很简单。这个概念被称为切片。
$email = '<asd@somewhere.co>';
if( strpos( $email, '@' ) ) {
$new_email = substr( $email, 1, strlen($email)-2 );
echo $new_email;
}
输出:asd@somewhere.co