Ответ 1
Объяснить: ^ в начале символьного класса будет отрицать этот класс. Но он должен быть внутри класса для работы. Тот же символ вне класса символов является якорем для начала строки/строки.
Вместо этого вы можете попробовать:
"[^0-9]"
Как вы заменяете все символы в строке, которая не соответствует критериям. У меня проблемы с оператором 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"
Объяснить: ^ в начале символьного класса будет отрицать этот класс. Но он должен быть внутри класса для работы. Тот же символ вне класса символов является якорем для начала строки/строки.
Вместо этого вы можете попробовать:
"[^0-9]"
Вот быстрый лист обмана определения символьного класса и его взаимодействие с некоторыми метасимволами регулярных выражений.
[aeiou]
- соответствует только одному строчному гласному[^aeiou]
- соответствует символу, который НЕ является строчным гласным (класс отрицательных символов)^[aeiou]
- соответствует строчной гласной, закрепленной в начале строки[^^]
- соответствует символу, который не является каретой /'^'
^[^^]
- соответствует символу, который не является кареткой в начале строки^[^.].
- соответствует любому, кроме буквального периода, за которым следует символ "любой", в начале строки[a-z]
- соответствует одному символу в диапазоне от 'a'
до 'z'
(т.е. все строчные буквы)[az-]
- соответствует либо 'a'
, a 'z'
, либо '-'
(буквальная тире)[.*]*
- соответствует непрерывной последовательности (возможно пустой) точек и звездочек[aeiou]{3}
- соответствует 3 последовательным строчным гласным (все не обязательно одинаковые гласные)\[aeiou\]
- соответствует строке "[aeiou]"