2016-06-20 197 views
2

我正在嘗試提取帶有正則表達式#([a-z0-9_]+)的HTML文本中的主題標籤,但HTML屬性存在問題。正則表達式匹配hashtag,但不匹配HTML屬性

例如,在HTML文本:

hola que tal with #hash1. 
hola que tal with #hash2 

y <a href="hola.que.tal#hash3"> para #hash4. </a> 

我想恢復 「HASH1」, 「HASH2」 和 「hash4」,但 「hash3」。

我試着用lookarounds來解決它,下面的表達式:

(?<!<)#([a-z0-9_]+)(?!.*?>) 

但沒有成功。

我如何才能做到這一點單個正則表達式

+0

使用一個html解析器,並最終使用xpath查詢來僅定位文本節點。然後使用一個基本的正則表達式爲每個文本節點找到你的井號標籤。 –

+0

我知道我可以在幾個步驟中完成,但我需要用一個正則表達式來完成。謝謝@CasimiretHippolyte –

+0

爲什麼你只想做一步(正則表達式)? –

回答

2

這應該工作

/#[a-z0-9_]+(?![^<]*>)/ 

http://www.regexpal.com/?fam=95144

什麼負先行的作用是確保有井號標籤和下>之間的<

+0

偉大的正則表達式。我附上結果,因爲我需要捕獲結果。用您的解決方案進行編輯。謝謝! –