Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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中用于筛选@name或@name.lastname的正则表达式_Php_Regex_Codeigniter 3_Preg Match All - Fatal编程技术网

PHP中用于筛选@name或@name.lastname的正则表达式

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

我有一个像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, 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非常感谢。作品