>백엔드 개발 >PHP 튜토리얼 >求高手,关于网址正提取则

求高手,关于网址正提取则

WBOY
WBOY원래의
2016-06-23 14:23:061003검색

本帖最后由 dz215136304 于 2013-09-10 14:52:56 编辑

需求:提取出字符串中的url

因为需要将提取出来的网址再次处理,所以放到回调函数里,但是同样的正则放在preg_match_all正常,而放到preg_replace_callback中就不起作用,一下代码是提取出sdfsd.qq.www.qq.com

$con='http://sdfsd.qq.www.qq.com/sdf.html?a=c';//preg_match_all('/([a-z1-9\.]+\.[com|cn|info]+)/is', $con, $arr);//print_r($arr);这里可以正常提取出sdfsd.qq.www.qq.com的网址$conn=preg_replace_callback('/([a-z1-9\.]+\.[com|cn|info|tk|us]+)/isum', 'url', $con);//同样的正则放到这里就提取不出sdfsd.qq.www.qq.comecho $conn;   function url($url){return $url[1];//不管这里是$url[0]还是$url[1]}

回复讨论(解决方案)

preg_match_all 是提取
preg_replace_callback 是替换


function url($url){
  return $url[1];//原样返回
}
如何能看出效果呢?

preg_match_all 是提取
preg_replace_callback 是替换


function url($url){
  return $url[1];//原样返回
}
如何能看出效果呢?
帮我看下这个正则有点问题,如何修改呢
1.当字符串中有www.w3.org或者w3.org之类字符串时原样返回,现在问题是 只匹配到了org造成了结果是“http://www.w3.http://localhost/psh/1999/xhtml”
2.字符串中的此正则必须包含"i"参数来不区分大小写,档字符串中包含“loginInfo.js”时 也出错,匹配成了“http://localhost/xxx1rr1dpn/loginhttp://localhost/jogp.js”,正确的应该是“http://localhost/xxx1rr1dpn/loginInfo.js”

$con='http://www.w3.org/1999/xhtml,http://www.qq.com/loginInfo.js';$url=preg_replace_callback('/(http:\/\/?[a-zA-Z1-9\.]{2,}\.{1}com|cn|info|tk|org|us)/is', 'url', $con);echo $url; function url($url){	echo $url[1]."<br>";if($url[1]=='http://www.w3.org'||$url[1]=='www.w3.org'||$url[1]=='w3.org'){	return $url[1];}return "http://localhost/".str_replace("http://","",$url[1]);//}

试试

$con='http://www.w3.org/1999/xhtml,http://www.qq.com/loginInfo.js';  $url=preg_replace_callback('/http:\/\/[\w.]+(com|cn|info|tk|org|us)/is', 'url', $con);echo $url;  function url($url){    echo $url[0]."\n"; if($url[0]=='http://www.w3.org'||$url[0]=='www.w3.org'||$url[0]=='w3.org'){    return $url[0];}return "http://localhost/".str_replace("http://","",$url[0]);// }

preg_replace_callback 是替换

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.