Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中获取电子邮件-正则表达式语法+;预赛_Php_Regex_Preg Match_Preg Match All - Fatal编程技术网

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

Php 从字符串中获取电子邮件-正则表达式语法+;预赛,php,regex,preg-match,preg-match-all,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); 我得到的

我正试图从一个字符串中提取电子邮件:

$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);
我得到的错误是:

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


我从这里得到了正则表达式语法

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

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

$pattern = '/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i';
或更小的版本:)


使用PCRE regex函数时,需要用分隔符将模式括起来:

常用的分隔符有正斜杠(/)、散列符号(#)和 波浪形(~)。以下是所有有效分隔符的示例 模式

然后必须将此行更正为:

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


添加/i或在最后一个b之后(即模式中)可能重复的$matches之前我尝试过,$matches结果为空。在这种情况下,您的正则表达式需要调整。语法错误通过正确划界得到修复;构造一个有效的正则表达式是一件完全不同的事情:)我以前试过,$matches结果为空..它是关于你的模式的。。。更改play with it…@homerrrrrrrr除了添加正确的分隔符外,还需要添加regex
i
标志,因此电子邮件搜索不区分大小写。匹配结果为空,因为它使用区分大小写的搜索。您得到的错误是因为模式没有正确地用分隔符包装。上面的答案确实解决了这个问题,它是关于一条错误消息的。如果您想知道为什么没有匹配项,则需要单独问第二个问题。@MorSela是的,第一个需要在模式的开始和结束处添加分隔符//的问题。在需要之后,必须添加“i”修改器以区分大小写。就这些。:)@MorSela谢谢:)@j5Dev我也使用regex builde,这一个:非常酷的工具:)@MorSela不介意:)你能展示一下你是如何在函数中使用这种模式的吗(
preg\u match
preg\u match\u all
)@MorSela我已经纠正了,你的regex模式是[a-z\d.\\\\\$%&+/=?
-++-/=(?:[a-z.-++++-/=][a-z\d](?:[a-z\d-]*[a-z\d])?\)+[a-z\d](?:[a-z\d-]*[a-z\d])?有一个警告,例如regex模式
/这里是您的模式/
,这里是使用
/
模式定界符,因此在您的模式中必须转义每个
/
字符。另外,例如,如果您使用
作为模式定界符,则必须转义模式中的每个
字符,等等。。。
/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#';