2013-07-03 80 views
0

我正在創建一個PHP正則表達式腳本,它可以匹配和替換字符串中的單詞。PHP:正則表達式在Lookbehind Assertions中使用通配符替換單詞

正則表達式需要匹配唯一完整的話,我可以很容易地做到:

/\b(SEARCH_TERM)\b/ 

我遇到的問題是,某些字符串包含HTML元素,如<一個>標籤和<IMG>標籤,其中HREFSRC屬性有時包含其路徑中的要被替換的單詞。 如果這些單詞在這些元素中被替換,那麼鏈接或圖像將不再起作用。

例如,對於下面的例子中字符串「SEARCH_TERM」一詞取代「測試」:

my test string <a href="http://www.google.com?q=my+test+string">link</a> 

將返回:

my SEARCH_TERM string <a href="http://www.google.com?q=my+SEARCH_TERM+string">link</a> 

而我需要它忽略href屬性文字和返回:

my SEARCH_TERM string <a href="http://www.google.com?q=my+test+string">link</a> 

我看過使用正則表達式的Lookbehind Assertions(as just bel ow),但不允許使用可變長度的通配符。

/(?<!(href|src)=.*)\b(SEARCH_TERM)\b/ 

注意:我特別需要使用正則表達式,而不是DOM解析器。

+0

使用[HTML解析器(http://stackoverflow.com/questions/3577641/parsing-and-processing-html- xml)..不要使用正則表達式。相信我,它更容易使用解析器解析html,而不是使用正則表達式來執行。 – Anirudha

+0

正如底部所述,我特別需要使用正則表達式來完成此操作。 – ticallian

+0

所有最好然後:P – Anirudha

回答

2

正如我所提到的你需要使用一個html parser

但是如果你想它

/\btest\b(?=[^>]*(<|$))/s 

上述正則表達式將只是如果有匹配<end of string(也不行),前面傳來不匹配>


注意

這如果您的文本本身包含,則不起作用210。

例如

hello>world 

因此,你應該使用一個解析器的原因

+0

這很好,非常感謝! – ticallian

+0

'REPLACE 其他文字.' –

+0

@MadaraUchiha如果html的大小很小,那將是另一個好技術 – Anirudha

相關問題