一个函数接收到这样的带有特殊符号的东西(,>_$'
,Java replaceAll 抛出错误。
样本输入
如果输入这样的内容,我会收到错误:
[ FAILED ] appendtext变量具有System.lineSeparator()
:
$model_fsdfdsfdsfdsfdsfds->load('fsdfdsfdsfdsfdsfds','dsfsdfsd');
$model_fsdfdsfdsfdsfdsfds->fsdfdsfdsfdsfdsfds->index();
如果输入为没有错误:
[OKAY] appendtext变量有简单的输入System.lineSeparator()
:
mysomethingmodel
blabla
解释
appendtext与其他组合进入 String :
String allappend = "Something simple var" + System.lineSeparator() + "\t{" + System.lineSeparator() + appendtext;
好的。比它使用正则表达式进入 replaceAll 并引发错误:
str_list = rs.replaceAll(regex_newlinebracket, allappend);
regex_newlinebracket是来自另一个函数的正则表达式:
public String RegexPatternsFunction(String types, String function_name)
{
// get a rid of special sign
String function_name_quoted = Pattern.quote(function_name);
switch (types) {
case "newlinebracket":
return function_name_quoted + "(\\s|\\t|\\n)+[{]";
}
return null;
}
错误
线程“AWT-EventQueue-0”java.lang.IllegalArgumentException 中的异常:非法组引用
at java.util.regex.Matcher.appendReplacement(Matcher.java:808)
at java.util.regex.Matcher.replaceAll(Matcher.java:906)
at java.lang.String.replaceAll(String.java:2162)
或者来自 Matcher.java 的内幕 appendReplacement 函数:
// The first number is always a group
refNum = (int)nextChar - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");
cursor++;
问题
使用特殊字符作为
$model_fsdfdsfdsfdsfdsfds->load('fsdfdsfdsfdsfdsfds','dsfsdfsd');
$model_fsdfdsfdsfdsfdsfds->fsdfdsfdsfdsfdsfds->index();
将 replaceAll 组合为 Regex 模式时引发错误。
如果没有特殊标志,项目可以工作。
我Pattern.quote
习惯于转义特殊字符,换句话说,如果输入喜欢()
并使用正则表达式替换所有,它将不起作用。
在 C++ Qt 中,它运行良好,在 Java 中则不行。
解决方案?