可以說我有一個字符串形式的XML。我希望刪除XML字符串中兩個標籤之間的內容。我曾嘗試過:Java:String.replace(regex,string)從XML中刪除內容
String newString = oldString.replaceFirst("\\<tagName>.*?\\<//tagName>",
"Content Removed");
但它不起作用。任何指針,我在做什麼錯?
可以說我有一個字符串形式的XML。我希望刪除XML字符串中兩個標籤之間的內容。我曾嘗試過:Java:String.replace(regex,string)從XML中刪除內容
String newString = oldString.replaceFirst("\\<tagName>.*?\\<//tagName>",
"Content Removed");
但它不起作用。任何指針,我在做什麼錯?
OK,除了顯而易見的答案(don't parse XML with regex),也許我們可以解決這個問題:
String newString = oldString.replaceFirst("(?s)<tagName[^>]*>.*?</tagName>",
"Content Removed");
說明:
(?s) # turn single-line mode on (otherwise '.' won't match '\n')
<tagName # remove unnecessary (and perhaps erroneous) escapes
[^>]* # allow optional attributes
>.*?</tagName>
您確定您正確匹配標記大小寫嗎?也許您還想要將i
標誌添加到模式中:(?si)
最後,只需使用string.replaceFirst(「
也許問題就出在這裏:
<//tagName>
嘗試將其更改爲
<\/tagName>
在Java中,''會很好地完成,沒有任何逃脫。 –
我在這裏試過了,它的工作原理是轉義'/'char http://gskinner.com/RegExr/ –
@Pable是的,但是它沒有使用Java Regex引擎,它是flex/flash –
XML是一種語法;正則表達式不是使用語法的最佳工具。
我的建議是一個真正的解析器正與DOM的工作做比賽
舉例來說,如果你有代替:
<xml>
<items>
<myItem>
<tagtoRemove>something1</tagToRemove>
</myItem>
<myItem>
<tagtoRemove>something2</tagToRemove>
</myItem>
</items>
一個正則表達式可以嘗試與之匹配(因貪婪的機制)
<xml>
<items>
<myItem>
matchString
</myItem>
</items>
此外,一些使用了一些DTD的可允許(如<tagToRemove/>
或<tagToRemove attr="value">
)使與正則表達式莫醒目標籤很難。
除非你很清楚上述情況不會發生(也不在將來),否則我會使用解析器。
如果除了最簡單的非嵌套xml之外,其他任何東西都不會起作用。 –