0

我正在编写一个函数来解析一些视频站点 url 以生成嵌入 html:

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.comurl:,http://www.b.com/v_OTQ2MDE4MDg.html我不必调用preg_match()两次。

但是我仍然不确定这种做法是否很好,或者是否有更好的方法。

4

1 回答 1

3

为什么不做一个交替呢?(至少在这种情况下。)

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

那是 1preg_match和 0 strstr

此外,在这种情况下,这并不是一个很大的危险,但是当它们应该是点时逃避点通常是一个好主意;您的正则表达式将匹配"http://bacom/v_id_xhtml"(与"id_"捕获的(\w*?))。

如果您无法制作“一种适合所有人的模式”(如果您有很多选择,这实际上是一个坏主意,因为您的易读性会浪费掉),请使用模式来提取站点名称,然后switch对其进行操作。无论您有多少模式,它都将只是两个preg_matches 和零s。strstr

于 2013-07-31T01:39:40.153 回答