如何用正则表达式替换字符序列?

How to replace a character sequence with regex?

我需要删除 xml 中的无效字符引用,也就是说,如果在我的 xml 输入中有类似

的内容


必须删除或替换。删除 XML 中无效字符的代码不作为输入,是一个已经将这些字符转换为数字引用的流。我知道无效的 xml 字符是从 20 开始的十六进制数字,但我不知道如何制作正则表达式。我想在 Java.

中编码

这里有一些示例代码可以帮助您入门:

// Init replacement map
Map<Matcher, String> replacementMap = new HashMap<Matcher, String>() {
    {
       // Put your replacement rules here...
       put(m("regex1"), "replacement1");
       put(m("regex2"), "replacement2");
       // ...
    }

    // Helper method for quickly creating a matcher and improve code readability
    private Matcher m(String regex) {
        return Pattern.compile(regex).matcher("");
    }
};

// Load source string
String source = loadSourceString();

// Perform replacements
for(Map.Entry<Matcher, String> e: replacementMap.entrySet()) {
    e.getKey().reset(source).replaceAll(e.getValue());
}

您首先创建替换图,然后将要更改的文本加载到字符串中。我们通过在替换字符串前存储 Matcher 个实例来避免模式编译开销。

以下是替换规则的一些示例:

  • put(m("&x#[^;]{2};"), "")

这是最通用的方法。它删除任何字符序列。

  • put(m("&x#[2-9A-F][\dA-F];"), "BAZ")

此方法将十六进制范围 [20-FF] 中的任何字符序列替换为 BAZ

  • put(m("&x#.F;"), "FOO")

这个将任何以 F 结尾的字符序列替换为 FOO