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

Posted

技术标签:

【中文标题】从字符串中获取电子邮件 - 正则表达式语法 + preg_match_all [关闭]【英文标题】:getting emails out of string - regex syntax + preg_match_all [closed] 【发布时间】:2013-02-09 15:34:34 【问题描述】:

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

$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得到了正则表达式语法

【问题讨论】:

在最后一个 b 之后添加 /i 或 / (即在模式中) How to validate an email address in php的可能重复 【参考方案1】:

像这样

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

【讨论】:

@MorSela 是的,首先您需要在模式的开头和结尾添加分隔符 //。需要后必须添加“i”修饰符以不区分大小写。就这样。 :) @MorSela 谢谢 :) @j5Dev 我也使用 regex builde,这个:regexbuddy.com 非常酷的工具 :) @MorSela 不要介意 :) 你能说明你是如何在函数中使用这种模式的吗(preg_matchpreg_match_all @MorSela 我已经更正了,你的正则表达式模式 #[az\d!\#$%&'*+/=?^_|~-]+(?:\.[a-z\d!\#$%&'*+/=?^_|~-] +)*@(?:[az\d](?:[az\d-]*[az\d])?\.)+[az\d](?:[az\d-]*[az \d])?# 有一个警告,例如正则表达式模式/here your pattern/,这里你使用/ 模式分隔符,因此在你的模式中你必须转义每个/ 字符。此外,例如,如果您使用 # 作为模式分隔符,则必须转义模式中的每个 # 字符等...【参考方案2】:

使用 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#';

【讨论】:

我之前试过,$matches 是空的.. 它关于你的模式......改变它的玩法...... @homerrrrrrrr 除了添加适当的分隔符,您还需要添加正则表达式 i 标志,因此电子邮件搜索不区分大小写。匹配结果为空,因为它使用区分大小写的搜索。你得到的错误是因为模式没有正确地包含在分隔符中。上面的答案确实解决了关于错误消息的问题。如果您想知道为什么没有匹配项,则需要问一个单独的第二个问题。【参考方案3】:

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

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

【讨论】:

我之前试过,$matches 是空的.. 在这种情况下,您的正则表达式需要调整。语法错误通过正确分隔来修复;构建一个有效的正则表达式是完全不同的事情:)

以上是关于从字符串中获取电子邮件 - 正则表达式语法 + preg_match_all [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python 中正则表达式全部语法速查

正则表达式,电子邮件验证从文本框中获取用户输入

PYTHON正则表达式语法小结

用于从电子邮件标头获取 IP 地址的正则表达式 [重复]

正则表达式语法与正则表达式在iOS中的常见用法

Python自动化开发从浅入深-语言基础(正则表达式)