2013-03-29 167 views
0

假設我有這樣的文字:HTML解析 - 轉換文本到鏈接

阿龍在他的弟弟在米利巴罪牽連:和上(民20 8-13)。該帳戶不得進入應許之地。當部落抵達何爾山時,「在以東地的邊緣」,在摩西的命令下,摩西帶領亞倫和他的兒子以利亞撒到達山頂,在所有的人面前。在那裏,他剝奪亞倫祭司的衣服,放在以利亞撒身上;和亞倫死在那裏上安裝的頂部,是123年歲(民20:23-29比較申10:。。6; 32:50

我想要做的是,每一個大膽的文本轉換入一個鏈接,和紐帶,如果它是:

  • 民。 20:8-12,應該像:< a href =「num20.8-12」> Num。 20:8-13 </a>
  • Deut。 10:6; 32:50,應該是這樣的:Deut。 10:6 </a> < a href =「deut32.50」> Deut。 32:50 </A>

本文的結構是象下面這樣:

<DIV> 
    <B>Aaron</B> 
    <SPAN> 
    Aaron was implicated in the sin of his brother at Meribah (Num. 20:8-13), and on that account was not permitted to enter the Promised Land. When the tribes arrived at Mount Hor, "in the edge of the land of Edom," at the command of God Moses led Aaron and his son Eleazar to the top of that mountain, in the sight of all the people. There he stripped Aaron of his priestly vestments, and put them upon Eleazar; and there Aaron died on the top of the mount, being 123 years old (Num. 20:23-29. Comp. Deut. 10:6; 32:50) 
    </SPAN> 
</DIV> 

任何偉大的想法,將不勝感激。謝謝:)


編輯

代碼:

$chapters = array ("Deut", "Num"); 

$html = file_get_html($link); 

foreach($html->find('div') as $dict) { 
    $descr = $dict->find('SPAN', 0)->innertext;  
    $descrl = preg_replace("/$chapters\. [0-9:-]*/", "<a href=\"$0\">$0</a>", $descr); //--> See description below 

    echo $descrl . "<hr/>"; 
} 

說明:雖然我改變$chapters到像NumDeut一個字,它工作得很好,但在我將其更改爲$chapters,它不返回任何鏈接。

+2

這個問題並沒有表現出任何的研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 –

+2

嘗試正則表達式。提取所需的字符串,並將其替換爲所需的字符串。對於你的第一個例子,即。民。 20:8-13,try/num \。 [0-9: - ] * /,在您的上下文中足夠精確。 – zoujyjs

+0

您是否可以使用javascript,因爲這是您修改HTML頁面的DOM的方式? – Markasoftware

回答

2

您沒有指定規則,您應該爲自己定義和改進規則;我處理了你的具體情況。

//replace against either book followed by period followed by space 
//followed by one or more digit, comma, semicolon, space, or dash 
txt.replace(/(Num|Deut)\. ([\d:,; -]+)/g, function (match, book, verses) { 
    var link = ''; 
    //split the verse on semicolon + space as each must be linked 
    verses.split(/;\s+/).forEach(function (elem) { 
     //create the link; replace : with period 
     link += '<a href="' + book.toLowerCase() + elem.replace(':', '.') + '">' 
      + book + '. ' + elem + '</a> '; 
    }); 
    return link; 
}); 

http://jsfiddle.net/XaVXW/