2017-01-10 10 views
-3

私は、文字列から特殊文字&!)(}{][^"~*?:;\+-を置き換えるために書かれている正規表現ですが、何とか始まりとの終値として動作するよう、そこから[ & ]を交換することができません正規表現。どうやってやるの?今ののJava正規表現で文字クラス内の角括弧を使用して

System.out.println(" &!)(}{][^\"~*?:;\\+-".replaceAll("[| |&|!|)|(|}|{|^|\"|~|*|?|:|;|\\\\|+|-]", "_")); 
} 

出力:_______][__________

+1

を参照してください。 – khelwood

+0

'\'でエスケープしようとしています。これはJava文字列であるため、エスケープする必要があります。\\ ["' '。 – Thomas

+0

@khelwood:OPが文字クラスを使用していることを認識しているとは思わないが、普通の文字として '['と ']を見る... –

答えて

1

は、あなただけのJava正規表現の文字クラスの内部[]をエスケープする必要があります。

また、文字クラス|として扱われるため、|を文字クラスに代入する必要はありません。あなたの `[]`文字クラスで `|

System.out.println(" &!)(}{][^\"~*?:;\\+-".replaceAll("[\\]\\[ &!)(}{^\"~*?:;\\\\+-]", "_")); 
// => ___________________ 

はあなたがすべてのそれらを`必要はありませんJava demo

+1

PCRE/Python/.NET、POSIXでは、文字クラスの大カッコを適切な場所に置く必要はありません。 '[] ab []'。 JavaScriptでは、常に ']': '/ [^ \] abc [] /'をエスケープする必要があります。 JavaやICUの正規表現では、文字クラスの中で常に '['と ']'の両方をエスケープする必要があります。 –

関連する問題