1

我有一个用于在文本中查找电子邮件地址的简单正则表达式,但即使我没有看到错误,它也不起作用。

$addr=array();
$t='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean fermentum risus id tortor. Morbi leo mi, nonummy eget tristique non, rhoncus non leo. Donec quis nibh at felis congue commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos aaa@bbb.com. Aliquam ccc@ddd.net ornare wisi eu metus.';
if(preg_match_all('~[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}~',$t,$addr, PREG_SET_ORDER)){
  echo 'found';
}

我也试过我找到的这个版本,但它也没有工作:

if(preg_match_all('/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/',$t,$addr, PREG_SET_ORDER)){
4

3 回答 3

1

这也适用于匹配模式并且是最短的:

[0-z.%-]+@[0-z.-]+\.[A-z]{2,4}

这是有效的,因为0-z涵盖A-Z, a-z,0-9_, Az 也涵盖了 AZ 和 az

我用 ruby​​ 开发,你可以在http://rubular.com/r/PdbH1BjWMs看到这个“在行动”

于 2012-05-15T00:20:33.787 回答
1

您正在匹配全部大写的电子邮件。您需要做[A-Za-z],或者设置不区分大小写的标志preg_match

于 2012-05-15T00:01:40.230 回答
0

包括小写字母类:

if(preg_match_all('~[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[A-Z]{2,4}~',$t,$addr, PREG_SET_ORDER)){
  echo 'found';
}

...注意az

于 2012-05-15T00:04:51.230 回答