2013-02-07 57 views
0

我有網頁在約10-15鏈接存在,各個環節都在我的控制,並與像一些名人的話結束我想要篩選與字,所以我寫了這preg_match_all和正則表達式

結束所有鏈接
$regex='|<a.*?href="(.*_celebrity)"|'; 


    preg_match_all($regex,$result21,$parts); 
$links=$parts[0]; 
foreach($links as $link){ 
{ 
    echo $link."<br>"; 
    mysql_query ("INSERT INTO tablea(linkssas) VALUES ('$link')"); 
    } 

它完成了工作並過濾了以_celebrity結尾的所有鏈接,但輸出沒有輸入到數據庫中。所有鏈接都輸入到一行中,並且它不是普通的,而是以錨文本的形式輸入,但我想要純文本鏈接在數據庫中,因爲我使用的是foreach,因此所有鏈接都應該輸入單獨的行,但所有行都以單行形式輸入,並以如下形式錨定:http://xyz.com/edje/jjeieied_celebrity">A</a>

但我只想要數據庫中的鏈接

+0

你不應該使用正則表達式來獲取鏈接,而是使用DOMDocument。請閱讀:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Bgi

+2

聽起來像一個貪婪的正則表達式的問題。真的你想'href =「(。*?_ celebrity)」',但_really_你最好使用適當的DOM解析器,如DOMDocument或SimpleXML。 –

+0

這聽起來像一個工作託尼小馬.....或更好的是,[閱讀此](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- contains-tags/1732454#1732454),這是一個很好的解釋,爲什麼你不應該嘗試使用正則表達式解析HTML。 – SDC

回答

3

我覺得有必要給你DOMDocument遊:

$d = new DOMDocument(); 
$d->loadHTML($result21); 

$suffix = "_celebrity"; $suffix_len = strlen($suffix); 

foreach ($d->getElementsByTagName('a') as $link) { 
    $href = $link->getAttribute('href'); 
    if ($href && substr($href, -$suffix_len) === $suffix) { 
     // do your insert here 
    } 
} 

或者,使用的XPath代替getElementsByTagName

$xp = new DOMXPath($d); 

foreach($xp->query('//a[substring(@href, string-length(@href) - 9) = "_celebrity"]') as $node) { 
    echo $node->getAttribute('href'); 
} 

下面是從我們的聊天室的消息:

Please, don't use mysql_* functions in new code。他們不再維護and are officially deprecated。請參閱red box?請改爲了解prepared statements,並使用PDOMySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial

+0

並使用PDO插入使用bindParam – Bgi

+0

@Bgi好點,我差點忘了:) –

+0

或者甚至可能更好甚至xpath:[如何在XPathExpression實例中編程使用XPath函數?] (http://stackoverflow.com/questions/402211/how-to-use-xpath-function-in-a-xpathexpression-instance-programatically) – hakre

0

您可能想循環$ parts [1]而不是$ parts [0]。

http://php.net/manual/en/function.preg-match-all.php

+0

我試過部分[1]在這種情況下沒有輸出即將到來 – james

+0

http://eval.in/9123 – Bgi

+0

我不得不修改正則表達式,但在這種情況下使用正則表達式是不好的做法。這也是不好的做法,使用mysql_query() – Bgi