【问题标题】:Regular Expression in PHP to filter @name or @name.lastnamePHP中的正则表达式过滤@name或@name.lastname
【发布时间】:2020-08-25 17:12:10
【问题描述】:

我有一个像 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

我需要从文本中过滤所有@firstname.name 或@name。

示例:

txt = "Testando se essa pescaria é valida @ju1lio.leao, se não for aciona @alycianne.
Importante deixar @mirian ciente. E a @simone.akemi de sobreaviso.";

return: @mirian,@ju1lio.leao,@alycianne,@simone.akemi

我目前正在使用这些模式:

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
)

表达式从文本中过滤名称不正确。一些帮助/想法?

【问题讨论】:

  • /\@[a-z0-9\-\.]+/,您忘记在第一个模式中包含.
  • @CodeSpirit 谢谢。有效!!

标签: php regex codeigniter-3 preg-match-all


【解决方案1】:

\@[a-z0-9\-\.]+ 用于第一个模式也将匹配@alycianne. 中的点,它看起来像字符串的结尾。

在您尝试\@(([a-z0-9\-])+\.)+([a-z0-9])+ 的第二个模式中,您将第一组重复1 次或多次。该组以点结尾,因此要匹配,至少应该有一个点。

该组的第二部分也重复了1次或多次,因此在点之后也应该至少有一个char a-z0-9。


要获得所有 4 个匹配项,您可以使用 * 将第一组设为可选

@(?:[a-z0-9-]+\.)*[a-z0-9]+

Regex demo | Php demo

注意,您不必转义 \@ 并且可以重复字符类本身 [a-z0-9]+ 而不是匹配捕获组中的单个字符,然后重复该组.

示例代码

$txt = "Testando se essa pescaria é valida @ju1lio.leao, se não for aciona @alycianne.
Importante deixar @mirian ciente. E a @simone.akemi de sobreaviso.";
$pattern = "/@(?:[a-z0-9-]+\.)*[a-z0-9]+/";
preg_match_all($pattern, $txt, $matches);
print_r($matches[0]);

输出

Array
(
    [0] => @ju1lio.leao
    [1] => @alycianne
    [2] => @mirian
    [3] => @simone.akemi
)

【讨论】:

    【解决方案2】:

    您只能使用一种模式:

    $pattern = '/\@[a-z0-9-]+(?:\.?[a-z0-9-]+)/';
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2011-07-25
      • 2015-03-21
      相关资源
      最近更新 更多