0

関数はこのようなものを特別な記号(,>_$'で受け取り、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 では動作しません。

ソリューション?

4

1 に答える 1