从字符串中获取电子邮件 - 正则表达式语法+ preg_match_all

时间:2013-02-24 10:40:35

标签: php regex preg-match preg-match-all

我正在尝试从字符串中收到电子邮件。

$string = "bla bla pickachu@domain.com MIME-Version: balbasur@domain.com bla bla bla";
$matches = array();
$pattern = '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b';
preg_match_all($pattern,$string,$matches);
print_r($matches);

我得到的错误是: 分隔符不能是字母数字或反斜杠

http://www.regular-expressions.info/email.html

获取正则表达式语法

我该怎么办?提前谢谢!

3 个答案:

答案 0 :(得分:17)

喜欢这个

$pattern = '/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i';

或更小的版本:)

$pattern = '/[a-z\d._%+-]+@[a-z\d.-]+\.[a-z]{2,4}\b/i';

答案 1 :(得分:1)

您只需要将图案包装在正确的分隔符中,例如正斜杠。像这样:

$pattern = '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/';

答案 2 :(得分:1)

使用PCRE正则表达式函数时,需要用分隔符括起模式:

PHP Delimiters

  

经常使用的分隔符是正斜杠(/),哈希符号(#)和   波浪(〜)。以下是有效分隔的所有示例   图案。

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%

然后您必须将此行更正为:

$pattern = '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/';

$pattern = '#\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b#';