如何优化正则表达式



我有很多像这样的URL:

CCD_ 1。

最后,我想有一个像这样的明确的网址:

http://ru.wikipedia.org/wiki/AJAX

我做了两次操作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()或其他函数?

替换这两行

$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]);

我们在第一个backreference中捕获url ([^&]++),并用这个backreference替换整行。

最新更新