PHP中用于筛选@name或@name.lastname的正则表达式
我有一个像preg_match_all(PHP)这样的正则表达式,可以过滤文本中的电子邮件 示例:PHP中用于筛选@name或@name.lastname的正则表达式,php,regex,codeigniter-3,preg-match-all,Php,Regex,Codeigniter 3,Preg Match All,我有一个像preg_match_all(PHP)这样的正则表达式,可以过滤文本中的电子邮件 示例: txt = " tenho ujm texto onde tem um e-mail georgios@teste.com e seu amigos <a> georgios@lask.com </a> mirian@bagato.com sem contar"; return: georgios@teste.com, georgio
txt = " tenho ujm texto onde tem um e-mail georgios@teste.com e seu amigos <a> georgios@lask.com </a>
mirian@bagato.com sem contar";
return: georgios@teste.com, georgios@lask.com, mirian@bagato.com
我目前正在使用以下模式:
pattern = '/\@([a-z0-9\-])+/i';
pattern1 = '/\@(([a-z0-9\-])+\.)+([a-z0-9])+/i';
Return: Array
(
[0] => @alycianne
[1] => @ju1lio
[2] => @ju1lio.leao
[3] => @mirian
[4] => @simone
[5] => @simone.akemi
)
表达式错误地从文本中筛选名称。一些帮助/想法?您只能使用一种模式:
$pattern = '/\@[a-z0-9-]+(?:\.?[a-z0-9-]+)/';
您只能使用一种模式:
$pattern = '/\@[a-z0-9-]+(?:\.?[a-z0-9-]+)/';
对第一个图案使用
\@[a-z0-9\-\.]+
也将匹配@alycianne.
中的点,该点看起来像字符串的结尾
在您尝试的第二种模式中,\@([a-z0-9\-])+\)+([a-z0-9])+
重复第一组1次或更多次。这个组以一个点结束,所以要得到匹配,至少应该有一个点
组的第二部分也重复1次或更多次,因此在圆点后还应至少有一个字符a-z0-9
要获得所有4个匹配项,可以使用
*
@(?:[a-z0-9-]+\.)*[a-z0-9]+
|
注意您不必转义\@
,您可以重复字符类本身[a-z0-9]+
,而不是匹配捕获组中的单个字符,然后重复该组
示例代码
输出
Array
(
[0] => @ju1lio.leao
[1] => @alycianne
[2] => @mirian
[3] => @simone.akemi
)
对第一个图案使用
\@[a-z0-9\-\.]+
也将匹配@alycianne.
中的点,该点看起来像字符串的结尾
在您尝试的第二种模式中,\@([a-z0-9\-])+\)+([a-z0-9])+
重复第一组1次或更多次。这个组以一个点结束,所以要得到匹配,至少应该有一个点
组的第二部分也重复1次或更多次,因此在圆点后还应至少有一个字符a-z0-9
要获得所有4个匹配项,可以使用
*
@(?:[a-z0-9-]+\.)*[a-z0-9]+
|
注意您不必转义\@
,您可以重复字符类本身[a-z0-9]+
,而不是匹配捕获组中的单个字符,然后重复该组
示例代码
输出
Array
(
[0] => @ju1lio.leao
[1] => @alycianne
[2] => @mirian
[3] => @simone.akemi
)
/\@[a-z0-9\-\.]+/
,您忘记将
包含在第一个pattern@CodeSpirit非常感谢。工作<代码>/\@[a-z0-9\-\.]+/,您忘记在第一个pattern@CodeSpirit非常感谢。作品