我使用preg_match_all为短代码构建数组 它工作正常,但它也返回空值的数组 请看这里
使用这个匹配女巫我肯定是在追加额外的空数组
#\[link(.*?)link\=\"(.*?)\"(.*?)text\=\"(.*?)\"\]#e
我该如何清除它们。 我尝试过array_filter,但它没有用。
谢谢!
答案 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的回答是最佳方式。