如何使.replaceAll(String regex,String replace)的正则表达式对Userinput安全?

时间:2019-12-05 12:14:10

标签: java replaceall

在这样的程序中:

String userInput = "[]";
String str = "Hello World[]!";
String replacement = "";
str = str.replaceAll(userInput, replacement);
System.out.print(str);

我得到了错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 1
[]

但是我想要输出:

Hello World!

是否有办法使userInput对于replaceAll安全?假设userInput为:[]。我需要如何处理String才能始终替换String而不是String的含义。

2 个答案:

答案 0 :(得分:1)

如果您不希望将用户文本解释为正则表达式,只需使用replace而不是replaceAll

String str = "foo bar [] baz []";
String userInput = "[]";
String replacement = "moo";
str = str.replace(userInput, replacement);
// str = "foo bar moo baz moo"

请注意,它替换了目标的所有个事件。命名有点不幸。以下是String#replace*方法的摘要:

  • replace:替换所有逐字记录。
  • replaceFirst:替换第一个正则表达式匹配项。
  • replaceAll:替换所有正则表达式匹配项。

答案 1 :(得分:0)

您可以显式quote输入字符串:

ActionChains(driver).key_down(Keys.CONTROL).click(link).key_up(Keys.CONTROL).perform()
  

[]
  \ Q [] \ E