Java Regex替换所有不能按预期工作

时间:2018-03-22 18:35:59

标签: java regex mule mule-studio

我有以下Java正则表达式(https://.*?/ api / FHIR / DSTU2 /)来匹配大型JSON结果中以下模式https://somserver.esm.somedomain.edu/TST/api/FHIR/DSTU2/中的URL,

并将其替换为其他网址     https://api.anotherdomain.edu/FHIR/DSTU2/

我正在替换的URL在JSON结果中多次出现。我正在使用Java replaceAll函数,有时它失败了,我收到错误'Expected','而不是'''。发生这种情况是因为JSON结果在替换过程中被搞砸了,无法正确解析。奇怪的是,我在JAVA正则表达式测试中使用了相同的JSON结果,并且正则表达式看起来运行正常。你在这里看到了什么吗?谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个,

1.Object to String with return class java.lang.String

2.使用以下代码表达

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

final xml Flow将是

import java.util.regex.*;

payload=payload.replaceAll("https[:]//.*./api/FHIR/DSTU2/", "https://api.anotherdomain.edu/FHIR/DSTU2/");

return payload;

enter image description here

答案 1 :(得分:0)

我为此写了一个JUnit案例,试图重现错误。但是,在最后一个链接提供的下面给出了JSON输入,没有错误,并且每次都能正常工作。你能试试这个测试用例吗?

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;

import static org.junit.Assert.fail;

public class RegexReplacementTest {

    private static final Logger logger = LoggerFactory.getLogger(RegexReplacementTest.class);
    private static final String replacement = "https://api.anotherdomain.edu/FHIR/DSTU2/";
    private static final String pattern = "(https://.*?/api/FHIR/DSTU2/)";
    private String json;

    @Before
    public void setup() throws IOException {
        InputStream resourceAsStream = this.getClass().getResourceAsStream("/path/to/your/test.json");
        json = IOUtils.toString(resourceAsStream);
        resourceAsStream.close();
        validateJson(json);
    }

    @Test
    public void testReplace() {
        String replacedString = json.replaceAll(pattern, replacement);
        validateJson(replacedString);
    }

    private void validateJson(String json) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            objectMapper.readTree(json);
        }
        catch (IOException e) {
            logger.error("Error upon testing json!" , e);
            fail("Error upon testing json! " + e.getMessage());
        }
    }

}