1

我必须从以下字符串中提取电子邮件:

$string = 'other_text_here to=<my.email@domain.fr> other_text_here <my.email@domain.fr> other_text_here';

服务器向我发送日志并且我有这种格式,我怎样才能将电子邮件放入没有“to=<”和“>”的变量中?

更新:我已经更新了问题,似乎可以在字符串中多次找到该电子邮件,并且常规表达式无法很好地处理它。

4

4 回答 4

2

您可以尝试使用更严格的正则表达式。

$string = 'other_text_here to=<my.email@domain.fr> other_text_here';
preg_match('/to=<([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})>/i', $string, $matches);
echo $matches[1];
于 2013-10-16T13:59:32.810 回答
1

简单的正则表达式应该可以做到:

$string = 'other_text_here to=<my.email@domain.fr> other_text_here';
preg_match( "/\<(.*)\>/", $string, $r );
$email = $r[1];

当你echo $email,你得到"my.email@domain.fr"

于 2013-10-16T13:48:49.500 回答
0

尝试这个:

<?php
$str = "The day is <tag> beautiful </tag> isn't it? "; 
preg_match("'<tag>(.*?)</tag>'si", $str, $match);
$output = array_pop($match);
echo $output;
?>

输出:

美丽的

于 2013-10-16T13:57:12.850 回答
0

如果您确定<并且>没有在字符串中的其他任何地方使用,则正则表达式会很容易:

if (preg_match_all('/<(.*?)>/', $string, $emails)) {
    array_shift($emails);  // Take the first match (the whole string) off the array
}
// $emails is now an array of emails if any exist in the string

括号告诉它为$matches数组捕获。.*拾取任何字符并?告诉它不要贪婪,因此不会被它>拾取。

于 2013-10-16T13:47:51.293 回答