【发布时间】:2014-04-24 21:36:27
【问题描述】:
我正在使用 preg_match_all 构建短代码数组 它工作正常,但它也返回空值的数组 请看这里
使用这个匹配的女巫我肯定会导致额外的空数组
#\[link(.*?)link\=\"(.*?)\"(.*?)text\=\"(.*?)\"\]#e
我怎样才能清除这些。 我尝试了 array_filter 但它不起作用。
谢谢!
【问题讨论】:
标签: php preg-match-all
我正在使用 preg_match_all 构建短代码数组 它工作正常,但它也返回空值的数组 请看这里
使用这个匹配的女巫我肯定会导致额外的空数组
#\[link(.*?)link\=\"(.*?)\"(.*?)text\=\"(.*?)\"\]#e
我怎样才能清除这些。 我尝试了 array_filter 但它不起作用。
谢谢!
【问题讨论】:
标签: php preg-match-all
() 表示一个捕获组,即使它为空,也会在$matches 数组中表示。
要么摆脱像(.*?) 这样返回空的组周围的(),使其只是.*?(因为大概你不希望返回那些),或者告诉引擎不要用@ 捕获它987654326@ 喜欢(?:.*?)。
#\[link.*?link\=\"(.*?)\".*?text\=\"(.*?)\"\]#e
或者如果您确实希望它们不为空时返回,请使用+ 而不是*:
#\[link(.+?)link\=\"(.*?)\"(.+?)text\=\"(.*?)\"\]#e
【讨论】:
如果你像这样使用 array_filter() 函数应该可以工作:
$matches = array_filter($matches, function($item) { return trim($item[0]) && true; });
AbraCadaver 的答案是最好的方法。
【讨论】: