2009-07-28 62 views
1

我需要做一個正則表達式替換,我需要一個字符串並在它周圍包裝一個超鏈接(但這裏是catch),只要它不是已經被超鏈接包圍了。我將如何做到這一點?如何在超鏈接中包裝文本僅當它未包含在超鏈接中時

因此,舉例來說,讓我們的文字:

 
The quick brown fox. 

我想使 「敏捷的棕色」 的鏈接,就像這樣:

 
The <a href="http://www.stackoverflow.com/">quick brown</a> fox. 

但如果我發現文本:

 
The <a href="http://www.stackoverflow.com/">quick brown</a> fox. 

我想確保我不會在另一個超鏈接中包裝「快速棕色」。

我該怎麼做?

回答

0

它好像你正在解析呈現的html,如果是這樣的話爲什麼不解析原始html?然後這個問題變得微不足道了。

+0

我沒有看到它如何變得微不足道。我不明白原始和呈現的HTML之間的區別。 html是一種格式。瀏覽器將該格式呈現爲一個界面。 我使用正則表達式的文檔是html文檔。所以沒有辦法去除html。 – 2009-07-29 15:05:13

1

看起來可以讓你在某個地方。雖然不完美,但這裏有一個快速的正則表達式檢查,看看你的文本是否已經被包裹在錨標籤中。

(?<=>)quick brown(?=</a>) 

注意:lookbehind斷言需要固定長度(至少在PCRE中)。

1

如果要包裝鏈接的字符串是YOUR_STRING,請首先標識所有包含鏈接標記的地方。

正則表達式= <a[^>]*>[^<]*(YOUR_STRING)[^<]*</a>

開始與<a

其次長度零個或更多的序列不包含>

>通過

其次長度零個或更多的序列不包含<其次。

依次爲YOUR_STRING這是一個捕獲組。

接着是長度爲零或更長的序列,其不包含<

其次</a>

現在可以查明捕獲組YOUR_STRING通過鏈接標籤包圍的地方的字符偏移量。

除了這些地方,在所有其他地方,YOUR_STRING字面上出現,包裝鏈接標籤。

獎勵點:請注意,當您插入文本字符串,您可以更改字符偏移量,或者你的正則表達式可以拋出ConcurrentModificationException /不允許你插入時分析時間文本(取決於你是什麼庫使用)。處理這個問題的最好方法是創建一個單獨的StringBuffer,並在分析原始字符串時向其添加文本。

另請注意:識別超鏈接標籤的正則表達式可以寫得更聰明(對於正確的html),但是這對於錯誤的html也適用。例如。缺少href屬性,如<a>quick brown fox</a>。如果您期望的html可能不完美,並且您想要處理這些問題,那麼您應該相應地修改該正則表達式。

希望它有效。

1

而不是尋找的關鍵詞,它可能更容易只是做在URL簡單匹配,而只能做關鍵字替換如果該URL未在「原始」 HTML發現

+0

這將解決識別鏈接何時存在的第二個問題,但不會識別需要鏈接但尚未擁有它的單詞。 – davids 2012-11-03 20:18:29

相關問題