问题
How do you replace all of the characters in a string that do not fit a criteria. I'm having trouble specifically with the NOT operator.
Specifically, I'm trying to remove all characters that are not a digit, I've tried this so far:
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"
回答1:
To explain: The ^ at the start of a character class will negate that class But it has to be inside the class for that to work. The same character outside a character class is the anchor for start of string/line instead.
You can try this instead:
"[^0-9]"
回答2:
Here's a quick cheat sheet of character class definition and how it interacts with some regex meta characters.
- [aeiou]- matches exactly one lowercase vowel
- [^aeiou]- matches a character that ISN'T a lowercase vowel (negated character class)
- ^[aeiou]- matches a lowercase vowel anchored at the beginning of the line
- [^^]- matches a character that isn't a caret/- '^'
- ^[^^]- matches a character that isn't a caret at the beginning of line
- ^[^.].- matches anything but a literal period, followed by "any" character, at the beginning of line
- [a-z]- matches exactly one character within the range of- 'a'to- 'z'(i.e. all lowercase letters)
- [az-]- matches either an- 'a', a- 'z', or a- '-'(literal dash)
- [.*]*- matches a contiguous sequence (possibly empty) of dots and asterisks
- [aeiou]{3}- matches 3 consecutive lowercase vowels (all not necessarily the same vowel)
- \[aeiou\]- matches the string- "[aeiou]"
References
- regular-expressions.info/Character class, Anchors, Dot, Repetition
Related questions
- Regex: why doesn't [01-12] range work as expected?
- Character class subtraction, converting from Java syntax to RegexBuddy
- How can I exclude some characters from a class?
来源:https://stackoverflow.com/questions/3847294/replace-all-characters-not-in-range-java-string