Java正则表达式替换两个标签之间的所有内容,非XML

标签 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+">");
}

最佳答案

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

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

所以你必须使用(.+?) , (.?+) ,并且您必须空格 /\/ .

检查regex demo

<小时/>

编辑

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

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",结果是:

<tag_name>XXXX</tag_name>

关于Java正则表达式替换两个标签之间的所有内容,非XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410061/

相关文章:

javascript - 使用数组查找文本并替换为类等于文本的文本周围的链接

java - 在 android studio 中获取 android 4.0 中的位置时出现问题

java - 通用 CDI 生产者方法未按预期工作

java - 为什么我无法在 Android 的 SQLite 数据库中添加这些默认值?

java - 使用正则表达式从字符串中获取数字

C++11 正则表达式 : digit after capturing group in replacement string

python - 替换Python目录中文本文件中的值

java - 使用代理时,接口(interface)在 ClassLoader 中不可见?

java - 从具有特殊格式的 JAR 中提取类名

jquery - 如何同时替换字符和数字?