web-dev-qa-db-ja.com

範囲外のすべての文字を置き換える(Java文字列)

基準に適合しない文字列のすべての文字をどのように置き換えますか?特にNOT演算子で問題が発生しています。

具体的には、数字ではないすべての文字を削除しようとしています。これまでこれを試しました。

String number = "703-463-9281";
String number2 = number.replaceAll("[0-9]!", ""); // produces: "703-463-9281" (no change)
String number3 = number.replaceAll("[0-9]", "");  // produces: "--" 
String number4 = number.replaceAll("![0-9]", ""); // produces: "703-463-9281" (no change)
String number6 = number.replaceAll("^[0-9]", ""); // produces: "03-463-9281"
26
Chris Dutrow

説明すると、文字クラスの先頭にある^はそのクラスを無効にしますが、それが機能するためにはクラス内にある必要があります。文字クラス外の同じ文字は、代わりに文字列/行の開始のアンカーです。

代わりにこれを試すことができます:

"[^0-9]"
44
tangens

以下は、文字クラス定義のクイックチートシートと、それが正規表現のメタ文字とどのように相互作用するかです。

  • [aeiou]-1つの小文字の母音と完全に一致します
  • [^aeiou]-IS N'T小文字の母音(negated文字クラス)の文字に一致します
  • ^[aeiou]-行の先頭にアンカーされた小文字の母音に一致します
  • [^^]-キャレットではない文字に一致します/ '^'
  • ^[^^]-行頭のキャレットではない文字に一致します
  • ^[^.].-行頭に「任意の」文字が続くリテラルピリオド以外のすべてに一致
  • [a-z]-'a'から'z'(つまりすべて小文字)の範囲内の1文字に完全に一致します。
  • [az-]-'a''z'、または'-'(リテラルダッシュ)に一致します
  • [.*]*-ドットとアスタリスクの連続したシーケンス(空の場合もある)に一致します
  • [aeiou]{3}-3つの連続した小文字の母音に一致します(すべてが同じ母音であるとは限りません)
  • \[aeiou\]-文字列"[aeiou]"に一致します

参考文献

関連する質問

27