2009-09-04 5 views
17

私はできるだけ正規表現を使ってsolution to a previous questionに取り組んでいます。私のパターンは、NetBeansによるなぜこのJava正規表現は「不正なエスケープ文字」エラーを引き起こしますか?

"\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}" 

で、私は2つの違法なエスケープ文字を持っています。私はそれが\ dと\ wと関係があると推測していますが、それらは両方ともJavaで有効です。おそらく、Javaの正規表現のための私の構文はオフになっている...関係しているコードの

行全体は次のとおりです。

userTimestampField = new FormattedTextField(
    new RegexFormatter(
    "\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}" 
)); 
+0

パターンは、Javaにとっては正当なものであり、Eclipseで動作します。 NetBeansでごめんなさい。 – codevour

+0

興味深い。私は質問全体にコードの行全体を追加しています。エラーでもビルドしようとします...何が起こるか見てみましょう。 –

+4

あなたはそれを文字列で使っています。\ dと\ wを\\ dと\ wでエスケープすると思います。 – codevour

答えて

46

必要があります。

"\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}" 

これは、よく、より多くを取得率直に言って狂気、あなたはバックスラッシュを一致させたい:

public static void main(String[] args) {   
    Pattern p = Pattern.compile("\\\\\\\\"); //ERM, YEP: 8 OF THEM 
    String s = "\\\\"; 
    Matcher m = p.matcher(s); 
    System.out.println(s); 
    System.out.println(m.matches()); 
} 

\\ //JUST TO MATCH TWO SLASHES :(
true 
+4

+1これが問題になるはずです。 – Malax

0

あなたは"\\d""\\w"を試してみましたか?

-edit- 笑私は、正しい答えを掲載して降りて投票し、私は私の答えは間違って登場してstackoverflowのは、バックスラッシュをエスケープすることに注意してください:)

+1

私はそれを見て、あなたはSOのコードフォーマット機能を有効に活用していないことを否定しました。 ;) –

-1

私は、あなたは、2つの文字クラスにショートカットを逃れ追加する必要があると思います。試してみてください:"[\d]{4}[\w]{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

- グッドラック。

+0

同じエラー - 2つの不正なエスケープ文字。 –

+1

@MystikSpiral: '\ d'と' \ w' **は**文字クラスです。あらかじめ定義されている文字クラス '[0-9]'と '[A-Za-z0-9_]'のためのものです(ショートカットではありません)。 '[\ d \ s]'や '[\ w、。!?]'のように組み合わせて使用​​しない限り、括弧は冗長です。 –

6

次はどう:、あなたは\d\wタグのバックスラッシュをエスケープするために、この正規表現リテラルのJava Stringの内側にあると仮定すると、\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}

+0

これはエラーを取り除きます...実際に正規表現として動作するかどうかを見てみましょう。 –

+0

それは動作しているようです。 +1。しかし、私はバターチキンの答えを受け入れました。しかし、助けてくれてありがとう。 –

1

これは試しましたか?

\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2} 
0

あなたがする必要があるすべてはあなたの無効な文字ではなく8 \前

*\ 
ex: string ex = 'this is the character: *\\s'; 

を置くことです!!!!!

関連する問題