所以我试了这个regex:
$email = '';
preg_match('<.*?>', 'sadfas<email@email.com>', $email);
echo $email[0];
目标结果是提取'email@email.com',因为它在<然后签名…但它没有工作…>
我做错了什么?
您忘记了正则表达式分隔符(/
是一种流行的分隔符)。您还应该使用子模式来只匹配地址而不匹配<>
:
preg_match('/<(.*?)>/', 'sadfas<email@email.com>', $email);
echo $email[1];
或者,您可以做一个向前看和向后看,以避免使用子模式:
preg_match('/(?<=<).*?(?=>)/', 'sadfas<email@email.com>', $email);
echo $email[0];
你需要:
- 分隔正则表达式
- 为您想要的位创建一个捕获组
<?php
$email = '';
preg_match('/<(.*?)>/', 'sadfas <email@email.com>', $email);
print_r($email);
?>
测试:% php foo.php
Array
(
[0] => <email@email.com>
[1] => email@email.com
)
注意您想要的实际字段是如何在$email[1]
试试下面的代码:
preg_match('/<(.*)?>/', 'sadfas<email@email.com>', $email);
echo $email[1];
- 你需要把结果用圆括号括起来返回匹配。
- 为PHP匹配添加模式分隔符(我使用/)