Java Regex替换两个标记之间的所有标记,非XML

时间:2017-07-31 07:43:54

标签: java regex replace

我一整夜都在寻找,但其他答案都没有满足我的需求。他们甚至不会跑http://regexr.com/。我期待的是在<whatever> replace this stuff </whatever>

之间替换所有内容
public void updateValue(String tag, String value) {
    content = content.replaceAll("<"+tag+">(.?+)</"+tag+">", value);
}

public void updateValue(String tag, int value) {
    content = content.replaceAll("<"+tag+">(.?+)</"+tag+">", value+"");
}

public void updateValue(String tag, File value) {
    content = content.replaceAll("(&<"+tag+">=)[^&]*(&</"+tag+">=)", value.getPath());      
}

他们都没有工作。

修改

目前的做法是,标签与正则表达式的内容一起被删除。

private void replaceValue(String tag, String value) {
    content = content.replaceAll("<"+tag+">(.*?)<\\/"+tag+">", "<"+tag+">"+value+"</"+tag+">");
}

2 个答案:

答案 0 :(得分:1)

content = content.replaceAll("<tag>(.*?)</tag>", value);

已编辑回答接受来自参数的标记:

content = content.replaceAll("<"+tag"+">(.*?)</"+tag+">", value);

答案 1 :(得分:1)

它不起作用,因为您使用的模式(.?+)有点奇怪,它意味着匹配任何字符.可选?一次或多次+检查{{ 3}},要解决您的问题,您必须进行一些可以使用的更改:

content = content.replaceAll("<"+tag+">(.+?)<\\/"+tag+">", value);
//--------------------------------------^^^---^^

因此,您必须使用(.+?)(.?+),并且必须使用/来展示\/

检查your regex here

修改

在第二种情况下,您必须使用带有组的模式,因此您必须匹配第一个标记名称,然后匹配标记之间的值,然后是封闭标记,您可以使用:

private static void replaceValue(String tag, String value) {
    String regex = "<(.*?)>(.*?)</(.*?)>";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);

    if (matcher.find()) {                                                
        content = content.replaceAll(matcher.group(1), tag)
                .replaceAll(matcher.group(2), value)
                .replaceAll(matcher.group(3), tag);
    }
    System.out.println(content);
}

如果是

String content = "<MySQL.port>3306</MySQL.port>";

和tag =“tag_name”,value =“XXXX”,reslt是:

<tag_name>XXXX</tag_name>