【问题标题】:How to clear preg_match_all from empty array values如何从空数组值中清除 preg_match_all
【发布时间】:2014-04-24 21:36:27
【问题描述】:

我正在使用 preg_match_all 构建短代码数组 它工作正常,但它也返回空值的数组 请看这里

https://eval.in/141437

使用这个匹配的女巫我肯定会导致额外的空数组

#\[link(.*?)link\=\"(.*?)\"(.*?)text\=\"(.*?)\"\]#e

我怎样才能清除这些。 我尝试了 array_filter 但它不起作用。

谢谢!

【问题讨论】:

    标签: php preg-match-all


    【解决方案1】:

    () 表示一个捕获组,即使它为空,也会在$matches 数组中表示。

    要么摆脱像(.*?) 这样返回空的组周围的(),使其只是.*?(因为大概你不希望返回那些),或者告诉引擎不要用@ 捕获它987654326@ 喜欢(?:.*?)

    #\[link.*?link\=\"(.*?)\".*?text\=\"(.*?)\"\]#e
    

    或者如果您确实希望它们不为空时返回,请使用+ 而不是*

    #\[link(.+?)link\=\"(.*?)\"(.+?)text\=\"(.*?)\"\]#e
    

    【讨论】:

    • 成功了!两种选择都有效。谢谢你。必须等待几分钟才能接受。
    • 好的,如果您希望这些组不为空,请按照您接受的方式进行编辑。
    • 再次感谢您。我想说的是,捕获“”内的字符串,不要注意标签之间的内容,如链接---任何东西---文本。您的解释现在很有意义,因为我使用 () 并捕获了所有内容
    【解决方案2】:

    如果你像这样使用 array_filter() 函数应该可以工作:

    $matches = array_filter($matches, function($item) { return trim($item[0]) && true; });
    

    AbraCadaver 的答案是最好的方法。

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 2022-01-05
      • 2016-04-15
      • 2021-04-10
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多