Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在将URL传递给preg_match()之前,是否应该使用strstr()松散地验证URL?_Php_Preg Match_Strstr - Fatal编程技术网

Php 在将URL传递给preg_match()之前,是否应该使用strstr()松散地验证URL?

Php 在将URL传递给preg_match()之前,是否应该使用strstr()松散地验证URL?,php,preg-match,strstr,Php,Preg Match,Strstr,我正在编写一个函数来解析一些视频站点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 generat

我正在编写一个函数来解析一些视频站点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.com
这样的URL:
http://www.b.com/v_OTQ2MDE4MDg.html
,我不必调用
preg\u match()
两次


但我仍然不确定这种做法是好还是有更好的方法。

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

这是一个
preg_match
,零个
strstr
s

而且,在这种情况下,这并不是一个很大的危险,但在应该是点的时候逃离点通常是一个好主意;您的regexp将匹配
“http://bacom/v_id_xhtml“
(带有由
(\w*?)
捕获的
“id”


如果你不能制作“一个模式适合所有人”(如果你有很多选择,这实际上是个坏主意,因为你的易读性会下降),使用一个模式来提取站点名称,然后对其进行切换。然后,无论有多少个模式,它都将是两个
preg_match
es和零个
str
s。

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

这是一个
preg_match
,零个
strstr
s

而且,在这种情况下,这并不是一个很大的危险,但在应该是点的时候逃离点通常是一个好主意;您的regexp将匹配
“http://bacom/v_id_xhtml“
(带有由
(\w*?)
捕获的
“id”


如果你不能制作“一个模式适合所有人”(如果你有很多选择,这实际上是个坏主意,因为你的易读性会下降),使用一个模式来提取站点名称,然后对其进行切换。然后,无论您有多少个模式,它将只有两个
preg_match
es和零个
strstr
s。

有关
regex
的帮助:有关
regex
的帮助:谢谢,我已经解决了这个问题。谢谢,我已经解决了这个问题。
'#^http://(?:a\.com/id|b\.com/v)_(\w*?)\.html$#'