Regex替换,电子邮件正文中的电子邮件地址


Regex replace, email address from inside email body

我有(许多)电子邮件,其中包含<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

相关文章: