2009-01-31 46 views
1

更換正則表達式我有這個java字符串處理:在Java字符串

String bla = "<my:string>invalid_content</my:string>"; 

我怎麼能代替 「invalid_content」 的作品呢?

我知道我應該使用這樣的:

bla.replaceAll(regex,"new_content"); 

爲了有:

"<my:string>new_content</my:string>"; 

,但我不能瞭解如何創建正確的正則表達式

幫助,請:)

回答

8

你可以做點像

String ResultString = subjectString.replaceAll("(<my:string>)(.*)(</my:string>)", "$1whatever$3"); 
0

PCRE將是:

/invalid_content/ 

對於一個簡單的替換。你還想要什麼?

+1

可能在Java中工作的解決方案?此外,我認爲需要周圍的XML標籤來識別無效內容,這就是OP遇到的問題。 – 2009-02-01 00:44:07

0

invalid_content固定值?如果是這樣,你可以使用簡單的替換用新的內容:

bla = bla.replaceAll("invalid_content","new_content"); 
6

馬克的回答會的工作,但可以用兩個簡單的變化進行改進:

  • 中央括號是多餘的,如果你不使用該組。
  • 如果您有多個my:string標籤匹配,使它非貪婪會有所幫助。

,並提供:

String ResultString = SubjectString.replaceAll 
    ("(<my:string>).*?(</my:string>)" , "$1whatever$2"); 


但是,這仍然不是我怎麼會寫 - 替換可以用回顧後和超前簡單化,就可以避免重複標籤名,就像這樣:

String ResultString = SubjectString.replaceAll 
    ("(?<=<(my:string)>).*?(?=</\1>)" , "whatever"); 

當然,這後者可能不那麼友好的那些誰還不知道正則表達式 - 這不過是更容易維護/靈活,所以值得使用,如果你可能需要匹配比更沮st my:string標籤。

+0

偉大的答案 - 我認爲這應該被標記爲接受的解決方案 – Bostone 2010-03-27 19:13:57