2011-04-21 79 views
1

嗨我想找到RegEx,它可以幫助我在HTML中替換單詞。如果我想要替換的單詞也出現在HTML標記中,則會出現問題。

例子:<img class="TEST">asd TEST asd dsa asd </img>
,我需要得到的只有第二個「TEST」。

正在尋找的正則表達式應該看起來像>[^<]*TEST,但是這個正則表達式在字詞TEST之前也帶有字符。是否可以選擇單詞TEST?但想象其他組合(我不認爲「測試」是一個很好的解決方案,只要文本可能包含另一個字符以及)RegEx for HTML替換

+3

請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-04-21 13:35:17

+0

這是解析器的工作。做一個搜索:「java html parser」,你會在你的路上。 – ridgerunner 2011-04-21 15:33:20

回答

1

首先,像已經說了,並會再次說,使用XML的正則表達式通常是一個壞主意。但對於非常簡單的情況,它可以起作用,特別是如果您能夠生活在次優結果中。

所以,僅僅把測試組中,並且只替換組

喜歡的東西

Pattern replacePattern = Pattern.compile(">[^<]*(TEST)"); 
Matcher matcher = replacePattern.matcher(theString); 
String result = theString.substr(1,matcher.start(1)) + replacement + theString.substr(matcher.end(1)); 

免責聲明:未經測試,可能有一些關閉的情況的人。但是這個概念應該清楚。

2

首先,正則表達式不是html解析的好選擇..有很多增強的html解析器,你可以使用..

但是,如果你堅持使用正則表達式,這裏是正則表達式;

(?<=>.*)TEST(?=.*<) 

對於Java,

(?<=>.{0,100000})TEST(?=.{0,100000}<) 

爲什麼我們不能用更多信息*或+與Java的回顧後發正則表達式,Regex look-behind without obvious maximum length in Java

+0

我不解析整個html,因爲我使用傑里科。我只是想簡單地替換一些單詞。我不能讓你的正則表達式的工作......在這裏測試http://myregexp.com/ – rhorvath 2011-04-21 14:12:51

+0

我喜歡你的解決方案,但沒有工作像這樣的代碼: '

[NEWLINE這裏] TEST [NEWLINE這裏]

' – rhorvath 2011-04-22 16:27:35

0

怎麼樣,如果「TEST」比,好比說身體標籤內,或者在HTML標籤內這個問題的另一個標籤裏面?

+0

也許我說錯了。我的意思是'<' and '>'。如果單詞在標籤<>中,則是okey,如果其< here>不行,則不行。 – rhorvath 2011-04-21 15:28:50