10

我正在尝试从字符串中获取电子邮件:

$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

4

3 回答 3

21

像这样

$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';
于 2013-02-24T10:45:24.113 回答
2

使用 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#';
于 2013-02-24T10:45:25.247 回答
1

您只需要将模式包装在适当的分隔符中,例如正斜杠。像这样:

$pattern = '/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/';
于 2013-02-24T10:44:58.747 回答