29

基準に適合しない文字列内のすべての文字をどのように置き換えますか。特に 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"
4

2 に答える 2

50

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

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

"[^0-9]"
于 2010-10-02T19:55:25.700 に答える
27

文字クラスの定義と、それが正規表現のメタ文字とどのように相互作用するかについての簡単なチート シートを次に示します。

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

参考文献

関連する質問

于 2010-10-02T20:23:14.480 に答える