如何使用regex / PHP / preg_match_all处理未命中

时间:2013-01-25 17:44:22

标签: php wordpress

我正在使用底部的代码从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]

我希望发生的是,如果缺少额外参数(false / true),那么该匹配变为“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;
}

2 个答案:

答案 0 :(得分:1)

你的正则表达式正在寻找最后一个逗号和最后一组括号中的一个或多个字符。像

这样的东西

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

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

可能就是你所追求的,然后你必须测试最后一场比赛是否存在。 preg_match_all返回匹配的数量,以便您可以使用它,或者您可以在内联时执行内联...

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

答案 1 :(得分:0)

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

(,true|,false|$)

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