0

埋め込みHTMLを生成するために、いくつかのビデオサイトのURLを解析する関数を書いています:

if (strstr($url, 'a.com')) {
    $from = 'a';
} elseif (strstr($url, 'b.com')) {
    $from = 'b';
} else {
    return 'Wrong Video Url!';
}

if ($from == 'a') {
    // use preg_match() to retrieve video id to generate embedding html
    if (preg_match('#^http://a\.com/id_(\w*?)\.html$#', $url, $matches)) {
        // return video embedding html
    }
    return 'Wrong a.com Video Url!';      
}

if ($from == 'b') {
    if (preg_match('#^http://b\.com/v_(\w*?)\.html$#', $url, $matches)) {
        //return video embedding html
    }
    return 'Wrong b.com Video Url!';
}

私の使用目的は、状況strstr()によっては の呼び出しを減らすことpreg_match()です。たとえば、次のb.comような URL がある場合、2 回http://www.b.com/v_OTQ2MDE4MDg.html呼び出す必要はありませんpreg_match()

しかし、この種の練習が良いのか、それとももっと良い方法があるのか​​ 、まだわかりません。

4

1 に答える 1

3

なぜ交替をしないのですか?(少なくともこの場合。)

'#^http://(?:a\.com/id|b\.com/v)_(\w*?)\.html$#'

それは 1preg_matchであり、ゼロstrstrです。

また、この場合は大きな危険ではありませんが、ドットであるべきときにドットをエスケープすることは一般的に良い考えです。あなたの正規表現は一致"http://bacom/v_id_xhtml"します(によって"id_"キャプチャされ(\w*?)ます)。

「すべてに適合する 1 つのパターン」を作成できない場合 (多くのオプションがある場合は、読みやすさが低下するため、実際には悪い考えです)、パターンを使用してサイト名を抽出し、それに対して aswitchを実行します。パターンの数に関係なく、 2 つのpreg_matches とゼロの s になります。strstr

于 2013-07-31T01:39:40.153 に答える