2013-03-08 39 views
0

這是我的代碼的一部分,用於在任何位置的「{changenumber}」和「{/ changenumber}」之間在p,span,a和其他一些標籤中查找「1」然後用「2」代替:對於發現不包括正則表達式中的確切短語

代碼:

(((<(p|span|a|li|ul|br|/br|tr|td)[^>]*>)|(\{changenumber\}))[^<|(\{/changenumber\})]*)1(.*(<|(\{/changenumber\}))) 

和代碼替換:

\12\7 

但它在[^<|(\{/changenumber\})]排除這句話的所有字符的問題:"{","c","h","a"

我嘗試\b\{/changenumber\}\b(?!...)但我不能!

它如何排除確切短語「{changenumber}」?!


在一個簡單的方法:

當我們寫[^ ABC] +它排除了「A」和「B」和「C」,但有什麼辦法,如果我們希望它排除的確切「 ABC「?

[^(ABC)] +不起作用

[^ \ BABC \ B] +不起作用

(?!ABC)不起作用

(? !\ BABC \ b)deosn't工作

...


它的語言是英語

我使用正則表達式,因爲它是替換joomla中的rereplacer組件的方式

沒辦法?

+0

您使用哪種語言? – m0skit0 2013-03-08 18:35:13

+3

另外,你爲什麼用正則表達式解析html? – 2013-03-08 18:35:36

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2013-03-08 18:35:55

回答

0

當我們寫[^ ABC] +它排除了「A」和「B」和「C」,但什麼是 方式,如果我們希望它排除了確切的「ABC」?

[^(ABC)] +不起作用

[^ \ BABC \ B] +不起作用

(?!ABC)不起作用

這是錯誤的;負面預測作品;如果它似乎不這樣做,則用法是錯誤的。

但有一個問題:它排除在[^<|(\{/changenumber\})]所有這個短語— 「{」, 「C」, 「H」, 「a」 的 字符等

而不是

[^<|(\{/changenumber\})] 

((?!\{/changenumber\})[^<]) 

—我。即,將前視放置在否定集合的前面。

此外,您應該使.*非貪婪替換爲.*?