2016-12-13 8 views
2

私は出力として特別charatersどのように正規表現否定は

 String a = "fgA9.^"; 
     String b =""; 
     a = a.replaceAll("[^[a-zA-Z0-9]]", b); 
     System.out.println(a); 

この印刷物(。^)を交換するプログラムの下にあるが、私は正規表現パターンは、文字、数字を否定し、置き換える期待します特殊文字。

私は否定を使用し、両方のケースでは2、の違いは何ですか?a = a.replaceAll("[[^a-zA-Z0-9]]", b);

で私の期待される出力を見ることができますかネストされた文字クラスで

+0

文字クラスの結合を使用しました。 –

答えて

2

、あなたはunionを作成しました:

あなたはまた、2つ以上の別の文字クラスで構成される単一の文字クラスを作成する組合を使用することができます。共用体を作成するには、[0-4[6-8]]のように、一方のクラスを他方のクラスの内側にネストするだけです。この特定の共用体は、数字0,1,2,3,4,6,7および8と一致する単一の文字クラスを作成する。

パターン[^](空UNION句部分が無視される)とASCII文字と数字と一致[a-zA-Z0-9]から成るよう"[^[a-zA-Z0-9]]"正規表現は、英数字文字と一致します。

[[^a-zA-Z0-9]]パターンでは、ASCII文字/数字以外の任意の文字に一致するネゲートされた文字クラス[^a-zA-Z0-9]を指定し、空の部分と結合して再び無視しました。

[0-4[6-8]]正規表現は、[0-46-8]と完全に意味的に等価であり、より実用的な結合値は、否定と肯定の文字クラスを組み合わせる際に観察することができます。例えば。 [^\p{L}[a-c]]+は、文字([^\p{L}])以外の1つ以上の文字と一致し、3つの小文字のa,bおよびcの文字と一致します。

関連する問題