在字符串中使用replaceAll时获得正则表达式异常

时间:2019-03-24 12:05:39

标签: java regex

我有一个字符串,我必须在其中用我从用户输入的值替换某些文本。

String input = "Hello dear {{user.salutation}} {{user.name}},"

我需要将{{user.salutation}}替换为Mr.,依此类推。

我尝试在Java中使用带有正则表达式功能的replaceAll方法

input.replaceAll("{{user.salutation}}","Mr.")

但是,我不断遇到异常

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition
{{user.salutation}}
    at java.base/java.util.regex.Pattern.error(Pattern.java:1997)
    at java.base/java.util.regex.Pattern.closure(Pattern.java:3294)
    at java.base/java.util.regex.Pattern.sequence(Pattern.java:2183)
    at java.base/java.util.regex.Pattern.expr(Pattern.java:2038)
    at java.base/java.util.regex.Pattern.compile(Pattern.java:1760)
    at java.base/java.util.regex.Pattern.<init>(Pattern.java:1409)
    at java.base/java.util.regex.Pattern.compile(Pattern.java:1065)
    at java.base/java.lang.String.replaceAll(String.java:2125)

任何人都可以让我知道我的正则表达式模式出了什么问题。在此先感谢!!!

2 个答案:

答案 0 :(得分:1)

更改

input.replaceAll("{{user.salutation}}","Mr.")

   input.replaceAll("\\{\\{user.salutation\\}\\}","Mr.")
    or
   input.replaceAll("\\{\\{user.salutation}}","Mr.")

答案 1 :(得分:1)

replaceAll希望使用正则表达式,如果您想避免使用大括号,可以将代码替换为:

String newInput = input.replaceAll("\\{\\{user\\.salutation}}","Mr.");

您可以改用replace(与replaceAll相同,但不存在正则表达式问题)

String newInput = input.replace("{{user.salutation}}", "Mr.");