正则表达式 - 使用换行符替换标记之间的文本

时间:2017-11-07 04:26:22

标签: java regex groovy

我从soaupui请求中提取了请求文本,并且我正在尝试使用新标头替换所有内容。我已经尝试了几种不同的表达式,但我认为匹配有问题,因为文本包含新的行字符。

以下是我尝试过的最新内容

strRequest3 = strRequest3.replaceAll("<soapenv:Envelope(.*?
\\R)<soapenv:Header/>","<soap:Envelope " + strNewHeader + "</soap:Header>");
log.info strRequest3

下面的示例XML,我正在尝试插入新的第一行和标题

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:urn="urn:dhs-gov-au:ccs:pms:sessionreport">
<soapenv:Header/>
<soapenv:Body>

关于我可以尝试实现上述目标的正则表达式的任何想法都将非常感激

由于

1 个答案:

答案 0 :(得分:0)

如果您希望.*匹配换行符,则必须使用s标记(dotall)作为正则表达式。

在Java中,您可以通过在正则表达式前添加(?s)来设置此标志。

String str = "<soapenv:Envelope>123123\n" +
            "123123\n" +
            "1231422343\n<soapenv:Header/>";
String replacement = "new";

System.out.println(str.replaceAll("(?s)<soapenv:Envelope>(.*)<soapenv:Header/>",
            "<soapenv:Envelope>" + replacement + "<soapenv:Header/>"));