一个正则表达的大师

时间:2011-02-19 21:55:58

标签: php regex

这应该是一个简单的,但我很累,当时没有直接思考。

我有以下字符串:

"Brian Hannah <brian@abktechnologies.com>"

我想使用PHP将名称和电子邮件地址提取到单独的变量中。

6 个答案:

答案 0 :(得分:6)

Explode('<',$mystring).

如果所有字符串都相同。修剪并删除&gt;

答案 1 :(得分:3)

为了完整起见,这是一种使用正则表达式的方法:

preg_match('/^(.*)<(.*)>$/', $s, $matches);

查看在线工作:ideone

由于*在第一场比赛中贪婪,因此A<B <c.d>之类的字符串将被解析为"A<B", "<c.d>",而不是"A", "<B <c.d>"。要改为改为写(.*?)

答案 2 :(得分:2)

如果安装了PHP模块mailparse,则可以使用rfc822-parse-addresses功能。该页面上还有正则表达式示例,但它们无法处理所有可能的排列。一个完整的正则表达式解码电子邮件地址运行到几页密集的正则表达式。

答案 3 :(得分:1)

对于这种简单的字符串操作,您并不需要正则表达式的功率(和CPU费用)

$str = "Brian Hannah <brian@abktechnologies.com>";

$lt = strpos($str, '<');
$name = substr($str, 0, $lt - 1);
$email = substr($str, $lt + 1, strlen($str) - $lt - 2);

答案 4 :(得分:1)

通常,正则表达式比PHP及其字符串函数更快。但更基本的方法是:

strtok($string, "<")  and  $email = strtok(">");

答案 5 :(得分:0)

$v= "Brian Hannah <brian@abktechnologies.com>";

$arr = '#[<|>]#';

$d = preg_split($arr, $v);

var_dump( $d ) ;

值需要修剪()med tho