2011-07-06 13 views
1

javaのString.matchesメソッドを使用しているときに正規表現が行に一致しない理由がわかりません。オンライン正規表現テスターで一致します。ここでこの正規表現はなぜ一致しないのですか?

は、Javaコードです:

line.trim().replaceAll(" +", " ").matches("(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]"); 

と一致させる必要があります行:なぜそうなのか

bool fLoad) // somecomment 

誰もが任意のアイデアを持っていますか?

答えて

4

matches()は、完全にと一致する必要があります。つまり、文字列全体がREに適合します。あなたのREは ')'の後に何も許可しません。代わりにmatches()find()を使用してください。 全体入力が一致する必要があるので、あなたの正規表現の両端に.*を追加します:

line.trim().replaceAll(" +", " ").matches(".*(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)].*"); 

私はこれをテストし、あなたの

+0

Thx、これが私の問題を解決しました! – mort

1

JavaのString.match()は、他の多くの言語がそれを実装するように動作しません。サンプル行はtrueからmatches()

1

のようになります。ソースコード内で何らかの変数宣言と一致しているようです。あなたの正規表現で

私が想像する部分が「CONST(オプション)データ型」と一致することを意図された後、あなたはこれを持っている:

"(const)?[a-zA-Z0-9\\*]*\\ " 

は意図的なスペースに先立って\\ですか?単一の\と一致することを意味しますか?

+0

スペースは意図的です。データ型と変数名の間の宣言には常にスペースが必要です。 – mort

+0

しかし、なぜスペースの前にダブルバックスラッシュが必要ですか? –

関連する問題