【问题标题】:PHP preg_match_all regex expression weirdnessPHP preg_match_all 正则表达式表达式怪异
【发布时间】:2019-01-16 00:19:39
【问题描述】:

我在 php (preg_match_all) 中遇到了一些正则表达式问题。

我正在使用以下代码查找:封装的邮件,即:

preg_match_all("<[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})>:", $body,$matches);

由于某种原因,PHP 在冒号处爆炸并出现以下错误:

警告:preg_match_all() [function.preg-match-all]: Unknown modifier ':' in...

任何帮助都将不胜感激,因为我不是正则表达式专家,而且几乎没有头发可以拉。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您需要使用分隔符 EX:

    preg_match_all('/<[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})>:/', $body,$matches);
    

    查看我在两端添加的/,告诉 PHP 正则表达式在哪里开始和结束。

    【讨论】:

    • 返回以下内容:警告:preg_match_all() [function.preg-match-all]:分隔符不能是字母数字或反斜杠
    • 如何让电子邮件地址作为一个整体返回,而不是数组中的单个部分?
    • @SuperMykEl $matches[0] 将包含整个匹配项。 $matches[1-3] 将包含碎片。看看 $matches[0] :)
    【解决方案2】:

    您可以在开头和结尾使用T-Regx不需要 /

    $pattern = "<[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})>:";
    
    $matches = Pattern::of($pattern)->match($body)->all();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2014-02-24
      • 2016-08-08
      相关资源
      最近更新 更多