开发者社区 问答 正文

在Java正则表达式中如何在具有函数表示形式的字符串前添加前缀?

我有这样的字符串

String s1= concat(substring(inputJson.e.b,1,3),"test") 我想替换所有具有symbol()的函数。例如,concat(,)应该替换为Functions.concat()。

预期输出:

Functions.concat(Functions.substring(inputJson.e.b,1,3),,"test") 是否存在正则表达式模式来查找此类模式。

展开
收起
被纵养的懒猫 2019-09-23 17:22:50 555 分享 版权
阿里云 AI 助理回答

在Java中,你可以使用正则表达式和replaceAll方法来实现这样的字符串替换。你的需求是找到以特定函数名开始并包含括号的模式,并在这些模式前加上Functions.。下面是一个示例代码片段,展示了如何使用正则表达式来完成这个任务:

public class Main {
    public static void main(String[] args) {
        String inputJson = "String s1= concat(substring(inputJson.e.b,1,3),\"test\")";
        // 正则表达式匹配以concat、substring等函数名开始,后面跟着任何字符(非贪婪匹配)直到遇到右括号)
        String pattern = "(\\b(concat|substring)\\b\\([^()]*\\))";
        
        // 使用replaceAll方法进行替换,添加'Functions.'前缀
        String result = inputJson.replaceAll(pattern, "Functions.$1");
        System.out.println(result);
    }
}

在这个例子中,正则表达式\\b(concat|substring)\\b\\([^()]*\\)的工作原理如下: - \\b: 单词边界,确保我们匹配的是完整的函数名而不是部分单词。 - (concat|substring): 匹配concatsubstring中的任意一个。 - \\(: 匹配左括号。 - [^()]*: 非贪婪匹配任何不是左括号或右括号的字符,即括号内的内容。 - \\): 匹配右括号。

replaceAll方法中的"Functions.$1"表示将匹配到的整个模式替换为Functions.加上第一个捕获组的内容(即原始的函数调用),从而实现了你想要的功能。

请注意,如果还有其他函数需要处理,只需在正则表达式的(concat|substring)部分添加更多的函数名即可,比如变为(concat|substring|otherFunction)

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答