如何优化正则表达式?

时间:2015-02-27 09:59:45

标签: php regex

我有很多像这样的网址:

/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()或其他函数进行正则表达式?

1 个答案:

答案 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]);

我们在第一个反向引用中捕获网址([^&]++),并用此反向引用替换整行。