为了账号安全,请及时绑定邮箱和手机立即绑定

java正则表达式部分替换

java正则表达式部分替换

元芳怎么了 2021-08-25 16:32:57
我正在处理一些具有静态方法调用的遗留代码,我们需要将其从源代码树中删除。现有代码如下: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' 仅用于测试。在此先感谢任何可以给我一些建议的人。
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超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) 替换括号内的整个字符串。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信