Java正则表达式部分替换

时间:2018-09-02 01:02:15

标签: java regex

我正在处理一些具有静态方法调用的旧代码,我们需要将其从源代码树中删除。

现有代码如下:

Logger.getInstance(JdkUtil.forceInit(SomeBusiness.class));

我们最终需要做的是:

Logger.getInstance(SomeBusiness.class);

我今天已经花了一整天的时间来弄清楚如何进行替换。由于我对正则表达式的经验很少,因此我只能提出一种与源字符串匹配的模式。

模式JdkUtil.forceInit([a-zA-Z_0-9] *。class)在我提供的输入字符串上找到匹配项。我已经在https://www.freeformatter.com/java-regex-tester.html

上对此进行了测试

因此,如果有人可以为此发布Java解决方案,我将非常感激。

下面是到目前为止我有的一些Groovy代码。我所缺少的是上面解释的正确替换方式。

String source = 'Logger.getInstance(JdkUtil.forceInit(RtpRuleEngineCompiledImpl.class))'
    String regexpPattern = 'JdkUtil.forceInit\\([a-zA-Z_0-9\\)]*.class\\)'

    String replaced = source.replaceFirst(regexpPattern, 'hello')

    println replaced

运行上面的代码时,我得到以下输出:

Logger.getInstance(hello)

显然“ hello”仅用于测试。

在此先感谢任何可以给我一些建议的人。

1 个答案:

答案 0 :(得分:0)

您可能想要做一些事情,例如:

class StackOverflow {
    public static void main(String[] args) {
        String source = "Logger.getInstance(JdkUtil.forceInit(RtpRuleEngineCompiledImpl.class))";
        String regexpPattern = "JdkUtil.forceInit\\(([a-zA-Z_0-9]*.class)\\)";
        String replaced = source.replaceFirst(regexpPattern, "$1");
        System.out.println(replaced);
    }
}

结果

Logger.getInstance(RtpRuleEngineCompiledImpl.class)

捕获组($1)替换了括号内的整个字符串。