$bits = preg_split('#((?:https?|ftp)://[^\s\'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
说,我正在尝试匹配需要链接的网址。上面的内容过于宽松。
我想仅匹配http://google.com
之类的简单网址,但不匹配<a href="http://google.com">http://google.com</a>
或<iframe src="http://google.com"></iframe>
答案 0 :(得分:2)
您似乎正在尝试使用正则表达式解析HTML。 You might want to rethink that.
答案 1 :(得分:0)
试试这个......
function validUrl($url){
$return=FALSE;
$matches=FALSE;
$regex='#(^'; #match[1]
$regex.='((https?|ftps?)+://)?'; #Scheme match[2]
$regex.='(([0-9a-z-]+\.)+'; #Domain match[5] complete match[4]
$regex.='([a-z]{2,3}|aero|coop|jobs|mobi|museum|name|travel))'; #TLD match[6]
$regex.='(:[0-9]{1,5})?'; #Port match[7]
$regex.='(\/[^ ]*)?'; #Query match[8]
$regex.='$)#i';
if( preg_match($regex,$url,$matches) ){
$return=$matches[0]; $domain=$matches[4];
if(!gethostbyname($domain)){
$return = FALSE;
}
}
if($return==FALSE){
return FALSE;
}
else{
return $matches;
}
}
答案 2 :(得分:0)
RE
http:\/\/[a-zA-Z0-9\.\-]*
结果
Array
(
[0] => http://google.com
)
答案 3 :(得分:0)
更有效的RE
[hf]t{1,2}p:\/\/[a-zA-Z0-9\.\-]*
<强>结果强>
Array
(
[0] => Array
(
[0] => ftp://article-stack.com
[1] => http://google.com
)
)