簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM