2017-01-04 4 views
0

有効な変数宣言のJava正規表現チェッカーを作成しようとしています。[<-SPACE->]を受け入れ、regex javaの予約語を受け付けない

private static final String STRING_ARRAY_DATA_TYPE = "((String\\s*\\[\\s*\\]\\s*)"+STRING_VARIABLE+"|"+ 
               "(String\\s+"+STRING_VARIABLE+"\\s*\\[\\s*\\]\\s*))"; 
private static final String STRING_VARIABLE = "[$|_|[a-zA-Z]][$|_|\\w]*"; 
private static final String STRING_ARRAY_VALUES = "((" + STRING_VALUE + ",\\s*)*" + STRING_VALUE + "\\s*)*"; 
private static final String ASSIGNMENT = "\\s*=\\s*"; 
private static final String END_OF_STATEMENT = "\\s*;+\\s*"; 

そして、私はこの機能を持っている:わかりましたので、私は次のコードの変数を持って

private static boolean checkStringArray(String text) { 
    return text.matches(STRING_ARRAY_DATA_TYPE + END_OF_STATEMENT) || 
      text.matches(STRING_ARRAY_DATA_TYPE + "\\s+" + ASSIGNMENT + 
        "((new String\\[\\s*-?\\d+\\s*\\])|(new String\\[\\]\\{" + STRING_ARRAY_VALUES + "\\})|(\\{" + STRING_ARRAY_VALUES + "\\}))" + END_OF_STATEMENT); 
} 

だから私は二つの質問があります。

  1. どのように私は私の正規表現を受け入れない作るのですがJavaの特定の予約語は、例えばtruefalseのように?

  2. 私はものを検索してきたが、本当にそれは、この入力を受け付けていません理由として答えを見つけることができます:String [ ] myString;

+2

私たちに入力と期待される出力を与える例を与えてください。 –

+0

@PascalHeraud oh oh私はregexを使ってJavaの識別子の宣言をしようとしています。ご覧のとおり、2つの質問があります。 #1の場合、たとえば「int true」とします。真は予約語なので、受け入れてはならない。 #2では、String [] myStringを見つけました。受け入れられるべきですが、私のコードはそうしていません。 –

+0

与えているコードはコンパイルされません。 STRING_VARIABLEは使用後に定義されます(簡単です)。STRING_VALUEは定義しません。肯定的な例と否定的な例を含むテストシナリオと、あなたが得るものの代わりに期待するものも与えてください。何千という言葉に価値があるコード... –

答えて

0

それをエスケープ、特殊文字を一致させるには:

private static final String STRING_VARIABLE = "\\[$|_|[a-zA-Z]][$|_|\\w\\]*"; 
+0

はい私はその先生を認識していますが、私はString [] myStringを実行するとうまくいかない理由が非常に困惑しています。私が持っているSTRING_ARRAY_DATA_TYPE変数に\\ [\\ s * \\]を配置しましたが、期待どおりに機能していません。 –

関連する問題