0

我正在使用底部的代码从 wordpress 短代码中获取参数。简码本身如下所示:

[FLOWPLAYER=http://www.tvovermind.com/wp-content/uploads/2013/01/pll-316-21.jpg|http://www.tvovermind.com/wp-content/uploads/2013/01/PLL316_fv2.h264HD-Clip2.flv,440,280]

或者

[FLOWPLAYER=http://www.tvovermind.com/wp-content/uploads/2013/01/pll-316-21.jpg|http://www.tvovermind.com/wp-content/uploads/2013/01/PLL316_fv2.h264HD-Clip2.flv,440,280,false]

我想要发生的是,如果缺少额外的参数(假/真),那么匹配变为“假”,但是如果参数丢失,则使用当前代码永远不会进行匹配。有任何想法吗?

function legacy_hook($content){
    $regex = '/\[FLOWPLAYER=([a-z0-9\:\.\-\&\_\/\|]+)\,([0-9]+)\,([0-9]+)\,([a-z0-9\:\.\-\&\_\/\|]+)\]/i';
        $matches = array();
    preg_match_all($regex, $content, $matches);
    if($matches[0][0] != '') {
        foreach($matches[0] as $key => $data) {
            $content = str_replace($matches[0][$key], flowplayer::build_player($matches[2][$key], $matches[3][$key], $matches[1][$key],$matches[4][$key]),$content);
        }   
    }
    return $content;
}
4

2 回答 2

1

您的正则表达式正在寻找最后一个逗号以及最后一组括号中的一个或多个字符。就像是

/\[FLOWPLAYER=([a-z0-9\:\.\-\&\_\/\|]+)\,([0-9]+)\,([0-9]+)(\,[a-z]+)?\]/i

唯一的问题是你也会在比赛中得到逗号。

可能是你所追求的,那么你必须测试最后一场比赛是否存在。preg_match_all 返回匹配的数量,所以你可以使用它,或者你可以做一个内联 if...

(count($matches) > 4 ? $matches[4][$key] : false)

于 2013-01-25T17:57:13.047 回答
0

您可以在表达式末尾添加 OR

(,true|,false|$)

我没有检查它是否有效,但你明白了。

于 2013-01-25T17:55:47.340 回答