![](/img/trans.png)
[英]Get text between two tags using substringBetween() method of StringUtils
[英]StringUtils replace text in between two patterns
嗨,我發現 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"]]
知道如何做到這一點嗎?
問候。
您可以使用String#replaceAll
方法代替StringUtils
:
fileContent = fileContent
.replaceAll("(!\\[CDATA\\[\")[^\"]*(\"\\]\\])", "$1foo$2");
解釋:
(!\\\\[CDATA\\\\[\\")
: 匹配開頭![CDATA["
子字符串並在組 #1 中捕獲[^\\"]*
: 匹配 0 個或多個除"
之外的任何字符(\\"\\\\]\\\\])
: 匹配結束的"]]
子字符串並在組 #2 中捕獲$1foo$2
: 用foo
替換,兩邊有捕獲組 1 和 2 的反向引用您可以使用正則表達式, (\\<!\\[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 組結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.