从字符串中获取电子邮件-regex语法+preg_match_all


getting emails out of string - regex syntax + 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);

我得到的错误是:

分隔符不能是字母数字或反斜杠

我从这里得到了regex语法http://www.regular-expressions.info/email.html

像这个

$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';

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

PHP分隔符

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

/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#';

您只需要用一个合适的分隔符来包装您的模式,比如正斜杠。像这样:

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