2015-09-05 37 views
0

我想要製作一個匹配一個不包含在「a」標籤中的詞的正則表達式,我必須用鏈接替換一些詞,而不會中斷已存在的鏈接。 例如,搜索術語「計算器」,這應該與找到一個不包含在標籤中的詞

stackoverflow is magic 

但這些都不兩者應該:

Jump to <a href="stackoverflow.com">stackoverflow</a> 

我該怎麼辦呢?即使我使用HTML Parser,我仍然面臨着如何將preg_replace應用於不包含在「a」標籤中的術語的問題。

我發現這個表達式好聽的話:

(?![^<]*a>)stackoverflow 

但不幸的是,這並不在PHP工作。 非常感謝您的幫助

+2

另請參見:[PHP的正則表達式來匹配HTML標籤外的關鍵字 mario

+0

一個簡短的但hackish的方式將str_replace('> stackoverflow <','> 9gag <',$ URL); –

+0

使用'DOMDocument'來提取文本節點並搜索你的單詞。要排除研究中鏈接的文字,請使用'DOMXPath'。 –

回答

1

Your regex fails如果有任何a>在線。


使用(*SKIP)(*F)動詞|比賽word跳過鏈接like this

/<a[\s>][\s\S]*?\/a>(*SKIP)(*F)|stackoverflow/i 

\s一個空白,[\s\S]匹配任何字符匹配。

+0

'[\ s \ S] *?'是一個只需在Javascript中使用的技巧,使用PHP,使用'。*?'和's'(又名'singleline')修飾符。 –

+0

Thx很多,就像一個魅力。我不知道跳過技巧(我們每天都在學習正則表達式!) – Tinostarn

+0

如果單詞不包含在標記中,是否還有一種方法可以檢查同一個表達式?我也有img標籤,當我有例如時出現相同的pb – Tinostarn

相關問題