正则表达式用于查找小于等于号和大于等于号之间的文本


Regular Expression to find text between less than and greater than equal sign

所以我试了这个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];

你需要:

  1. 分隔正则表达式
  2. 为您想要的位创建一个捕获组
代码:

<?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];
  1. 你需要把结果用圆括号括起来返回匹配。
  2. 为PHP匹配添加模式分隔符(我使用/)