2013-02-15 116 views
0

我有一个网站爬虫,显示网址列表,但问题是我不能为我的生活得到最后的正则表达式很正确。 所有URL最终列为:正则表达式不太正确

http://www.website.org/page1.html&--EFTTIUGJ4ITCyh0Frzb_LFXe_eHw 
http://website.net/page2/&--EyqBLeFeCkSfmvA7p0cLrsy1Zm1g 
http://foobar.website.com/page3.php&--E5WRBxuTOQikDIyBczaVXveOdRFg 

的URL都可以是不同的,这似乎是静态的唯一的事情就是&符号。 如何去掉&符号及其以外的所有符号?

以下是我与上述结果的尝试:

function getresults($sterm) { 
$html = file_get_html($sterm); 
$result = ""; 
// find all span tags with class=gb1 
foreach($html->find('h3[class="r"]') as $ef) 
{ 
$result .= $ef->outertext . '<br>'; 
} 
return $result; 
} 

function geturl($url) { 
    $var = $url; 
    $result = ""; 

preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\/url?q=\']+". 
       "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/",    

       $var, $matches); 

$matches = $matches[1]; 

foreach($matches as $var) 
{  
    $result .= $var."<br>"; 
} 

echo preg_replace('/sa=U.*?usg=.*?AFQjCN/', "--" , $result); 

} 
+0

Google for”URL [or URI] regular expression“。 – KingCrunch 2013-02-15 00:26:15

+0

不要使用正则表达式来解析HTML!使用DOM解析器。 – 2013-02-15 00:35:13

+0

我是 - 网址中还有一些垃圾因为某些原因而被清除。 – user1823055 2013-02-15 00:52:39

回答

1

如果URL总是以相同的格式,使用爆炸:

<?php 
$tmp = explode("&", "http://foobar.website.com/page3.php&--E5WRBxuTOQikDIyBczaVXveOdRFg"); 
?> 

$ tmp [0] should content“http://foobar.website.com/page3.php “和 $ tmp [1] should content”--E5WRBxuTOQikDIyBczaVXveOdRFg“

+0

http://是关于唯一的东西,除了那个点之外,其他所有东西都是一样的,直到&符号可以是任何类型的url。在url之后它总是随机的字符。 – user1823055 2013-02-15 03:01:57

0

一个简单的方法&字符后,除去一切:

$result = substr($result, 0, strpos($result, '&')); 
+0

这似乎在某种程度上工作了一下,但是发生了什么事情呢,一切都变成了一个大的长包裹着的字符串,有几个网址,与之前的那些线路网址相反。任何建议? – user1823055 2013-02-15 08:59:23