嗨,我發現 apache 運算子非常有用
StringUtils.substringBetween(fileContent, "<![CDATA[", "]]>")
提取里面的資訊
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<envelope>
<xxxx>
<yyyy>
<![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<Document >
<eee>
<tt>
<ss>zzzzzzz</ss>
<aa>2021-09-09T10:39:29.850Z</aa>
<aaaa>
<Cd>cccc</Cd>
</aaaa>
<dd>ssss</dd>
<ff></ff>
</tt>
</eee>
</Document>
]]>
</yyyy>
</xxxx>
</envelope>
但是現在我正在尋找另一個允許我替換動態 xml 的運算子或正則運算式
![CDATA["old_xml"]]
通過另一個 xml
![CDATA["new_xml"]]
知道如何做到這一點嗎?
問候。
uj5u.com熱心網友回復:
您可以使用正則運算式, (\<!\[CDATA\[).*?(\]\]>).
演示:
public class Main {
public static void main(String[] args) {
String xml = """
...
<data><![CDATA[a < b]]></data>
...
""";
String replacement = "foo";
xml = xml.replaceAll("(\\<!\\[CDATA\\[).*?(\\]\\]>)", "$1" replacement "$2");
System.out.println(xml);
}
}
輸出:
...
<data><![CDATA[foo]]></data>
...
正則運算式的解釋:
(: 第 1 組開始\<!\[CDATA\[: 細繩<![CDATA[
): 第 1 組結束.*?: 任意字符任意次數(: 第 2 組開始\]\]>: 細繩]]>
): 第 2 組結束
uj5u.com熱心網友回復:
代替StringUtils,您可以使用String#replaceAll方法:
fileContent = fileContent
.replaceAll("(?s)(<!\\[CDATA\\[). ?(]]>)", "$1foo$2");
解釋:
(?s): 啟用DOTALL模式以便也.可以匹配換行符. ?(<!\\[CDATA\\[): 匹配打開的<![CDATA[子串并在組 #1 中捕獲. ?: 匹配 0 個或多個任何字符,包括換行符(]]>): 匹配結束]]?子串并在組#2 中捕獲$1foo$2: 替換為foo兩側的捕獲組 1 和 2 的反向參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342421.html
標籤:爪哇 正则表达式 apache-utils
上一篇:限制10個字符是數字,只有1個點
下一篇:資料框在文本上選擇一個單詞
