関数はこのようなものを特別な記号(,>_$'
で受け取り、Java replaceAll がエラーをスローします。
サンプル入力
次のように入力すると、エラーが発生しました。
[失敗しました] 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();
Regex パターンとして replaceAll を組み合わせるとエラーがスローされます。
特別なサインがない場合、プロジェクトは機能します。
私は特殊文字をエスケープすることに使用しています。つまり、正規表現を使用してreplaceAllPattern.quote
のように入力すると機能しません。()
C++ Qt では問題なく動作しますが、Java では動作しません。
ソリューション?