如何从空数组值中清除preg_match_all

时间:2014-04-24 21:36:27

标签: php preg-match-all

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

https://eval.in/141437

使用这个匹配女巫我肯定是在追加额外的空数组

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

我该如何清除它们。 我尝试过array_filter,但它没有用。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

要么删除()之前返回空的群组周围的(.*?),使其仅为.*?(因为可能是您不希望返回的那些)或告诉引擎不要使用像(?:这样的(?:.*?)来捕获它。

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

或者,如果您确实希望在非空时返回这些内容,请使用+代替*

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

答案 1 :(得分:0)

如果你像这样使用array_filter()函数:

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

AbraCadaver的回答是最佳方式。