2010-08-10 84 views
1

我需要在php中使用RegExp檢索錨標記innerHTML。想想我有這樣正則表達式在PHP中獲取錨標記InnerHTML的內容

<div class="detailsGray"><span class="detailEmail"><a href="http://example.com"class="fontLink">[email protected]</a></span></div> 

嘗試通過語法

preg_match_all('/class=\"fontLink"\>.*\<\/a\>/', $raw, $matches); 

但不工作得到它。只有我需要使用RegExp和preg_match_all()來檢索[email protected]。由於

+0

你真的需要使用PHP嗎?因爲如果沒關係,你可以使用JQuery或簡單的JavaScript來獲得你想要的東西。例如,如果你想檢索錨標籤只使用$('。fontlink')。attr('href')..只是一個建議.. – Manie 2010-08-10 09:51:02

+0

謝謝你的建議。但不幸的是,我需要使用PHP。 – abhis 2010-08-10 09:52:30

+0

[正則表達式在php中獲取div類的內容]的可能的副本(http://stackoverflow.com/questions/3446766/regular-expression-to-get-contents-of-div-class-in-php) – Gordon 2010-08-10 09:56:25

回答

2

使用解析器。幸運的是,PHP有一個!

$html = '<div class="detailsGray"><span class="detailEmail"><a href="http://example.com" class="fontLink">[email protected]</a></span></div>'; 
echo retrieve_node_text($html, "//a[@class='fontLink']"); 

// ----------------------------------------------- 
function retrieve_node_text($html_fragment, $xpath) { 
    $fragment = new DOMDocument(); 
    $fragment->loadHTML($html_fragment); 

    if ($fragment) { 
    $xp = new DOMXPath($fragment); 
    $result = $xp->query($xpath); 

    if ($result->length == 1) { 
     return $result->item(0)->textContent; 
    } 
    } 
    return FALSE; 
} 

回報:

[email protected] 
+0

非常感謝你 – abhis 2010-08-10 10:20:22

+0

@Ajith:不要忘記在代碼中加入一些錯誤檢查和處理。不能保證'loadHTML()'或'query()'成功運行,因爲'$ html_fragment'和'$ xpath'都可能被破壞。一定要用破碎的輸入進行測試,並相應地處理PHP錯誤或警告。 – Tomalak 2010-08-10 15:24:06

2

望着正則表達式是一個有點亂:

'/class=\"fontLink\">.*?<\/a>/'

據我知道有什麼特別之處<>在正則表達式。

你不想要.*,因爲這將直接行結束,然後開始反向工作。 .*?將採取下一個字符,如果不匹配,直到</a>

0

您的輸入是什麼?如果它是來自網絡的原始數據,那麼regexp並不是一個可靠的方法。加載你的dom作爲一個樹會更好。

0

你需要積極的前瞻和回顧後,讓你的格局將是這樣的:

(?<=class=\"fontLink\"\>).*(?=\<\/a\>) 
0

我覺得你的方法是不夠好。這是我的解決方案:

preg_match('/class=\"fontLink"\>(.*)\<\/a\>/', $raw, $matches); 
$parsedEmail = $matches[1]; 

上你想要的部分只需加括號,這樣他們就可以單獨進行匹配。 如果您只想匹配一個問題,請使用preg_match()而不是preg_match_all()。

相關問題