Mar*_*vac 0 java regex replaceall
函数接收具有特殊符号(,>_$'和Java replaceAll throwns错误的类似内容.
样本输入
如果输入这样的东西我得到一个错误:
[FAILED] appendtext变量有System.lineSeparator():
$model_fsdfdsfdsfdsfdsfds->load('fsdfdsfdsfdsfdsfds','dsfsdfsd');
$model_fsdfdsfdsfdsfdsfds->fsdfdsfdsfdsfdsfds->index();
Run Code Online (Sandbox Code Playgroud)
如果输入为:
[OKAY] appendtext变量有简单的输入System.lineSeparator():
mysomethingmodel
blabla
Run Code Online (Sandbox Code Playgroud)
说明
appendtext与其他组合一起进入String:
String allappend = "Something simple var" + System.lineSeparator() + "\t{" + System.lineSeparator() + appendtext;
Run Code Online (Sandbox Code Playgroud)
好的.比使用正则表达式替换所有并抛出错误:
str_list = rs.replaceAll(regex_newlinebracket, allappend);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
错误
例外在线程 "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)
Run Code Online (Sandbox Code Playgroud)
或者来自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++;
Run Code Online (Sandbox Code Playgroud)
问题
使用特殊字符作为
$model_fsdfdsfdsfdsfdsfds->load('fsdfdsfdsfdsfdsfds','dsfsdfsd');
$model_fsdfdsfdsfdsfdsfds->fsdfdsfdsfdsfdsfds->index();
Run Code Online (Sandbox Code Playgroud)
throwns在的replaceAll的组合作为正则表达式模式错误.
如果没有特别标志,项目将起作用.
我使用Pattern.quote到转义它不会工作,如果喜欢来输入换句话说特殊字符()和的replaceAll使用正则表达式.
在C++ Qt中,它运行良好,而不是Java.
解决方案?
你使用它很好(和必要)Pattern.quote.但是导致实际问题的是替换字符串,因为它包含$(替换字符串中的相关引用字符).幸运的是,Java为您提供了另一个引用函数,只是为了使替换字符串安全:Matcher.quoteReplacement()
所以试试吧
allappend = Matcher.quoteReplacement(allappend);
str_list = rs.replaceAll(regex_newlinebracket, allappend);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |