我有很多像这样的网址:
/url?q=http://ru.wikipedia.org/wiki/AJAX&sa=U&ei=oijvVNKSF4W8ygOowILgAw&ved=0CBQQFjAA&usg=AFQjCNHD3R0UX-Wfnl3D-LKn__SbHU4tZQ
。
在决赛中,我想要像这样清楚的URL:
http://ru.wikipedia.org/wiki/AJAX
我是通过2次操作preg_match()
for($i = 0; $i < count($links); $i++){
$link_without_url[].= preg_replace('~/url\?q=~', '', $links[$i]);
}
for($j = 0; $j < count($link_without_url); $j++){
$site_name = preg_replace('~&.*~', '', $link_without_url[$j]);
$site = file_get_contents($site_name);
preg_match_all('~<a.*?href="([^"]+)".*?>(.*?)</a>~s', $site, $match);
$links = $match[1];
for($i = 0; $i < count($links); $i++){
echo $i.'))'.$site_name.' '.$links[$i].'<br/>';
}
}
其中$ links是我的起始URL的数组。
是否可以只使用一个preg_match()
或其他函数进行正则表达式?
答案 0 :(得分:0)
替换这两行
$link_without_url[].= preg_replace('~/url\?q=~', '', $links[$i]);
$site_name = preg_replace('~&.*~', '', $link_without_url[$j]);
使用:
$site_name = preg_replace('~^/url\?q=([^&]++).*~', '$1', $links[$i]);
我们在第一个反向引用中捕获网址([^&]++)
,并用此反向引用替换整行。