0

下部のコードを使用して、ワードプレスのショートコードからパラメーターを取得しています。ショートコード自体は次のようになります。

[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;
}
4

2 に答える 2

1

正規表現は、そこにある最後のコンマと、最後の括弧のセット内の 1 つ以上の文字を探しています。何かのようなもの

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

唯一の問題は、一致でもコンマが取得されることです。

あなたが求めているものかもしれませんが、最後の一致が存在するかどうかをテストする必要があります。preg_match_all は一致の数を返すので、それを使用できるか、インラインで実行できます...

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

于 2013-01-25T17:57:13.047 に答える
0

式の最後に OR を追加できます

(,true|,false|$)

私はそれが機能するかどうかを確認しませんでしたが、あなたはアイデアを得る.

于 2013-01-25T17:55:47.340 に答える