#java #regex
#java #регулярное выражение
Вопрос:
У меня есть следующее регулярное выражение, которое проверяет десятичное число с десятичной точкой.
REGEX_VALID_DECIMAL_NUMBER = "\d (\.\d )*";
Итак, следующие числа действительны в соответствии с шаблоном:
0
0.0
1.00
etc.
Проблема в том, что я хочу расширить свое регулярное выражение так, чтобы оно игнорировало регистр проверки «-» при первом индексе строки — для отрицательных чисел.
REGEX_VALID_DECIMAL_NUMBER = "[^-\d (\.\d )*]";
Я пробовал это, добавив ^-, но это позволит везде «-«:
-0-
-0.0-
-1.00-
etc.
Как я могу добавить эту проверку для всех индексов, кроме первого индекса строки?
Комментарии:
1. Что заставило вас добавить
[^
и]
? Это используется для определения класса _character . Просто добавьте-?
в начале вашего выражения, что означает «символ тире / минус ноль раз или единожды». И если вы не используете,String.matches(...)
тогда добавьте это^
, чтобы также соответствовать началу ввода, т. Е.^-?d ...
.2.
"^-?[0-9] (\.[0-9] )*$"
не более одного минуса в самом начале3. Я хотел также создать регулярное выражение, которое также заменит эти недопустимые символы «» пустой строкой, но это другой вопрос.
4. Примечание: попробуйте проверить
1.1.1.1.1
, используя ваше выражение. 🙂 Подсказка: вместо(\.\d )*
вы, вероятно, хотите(\.\d )?
5. Что заставляет вас думать, что регулярное выражение является решением для этого? Просто используйте
Double.parseDouble
и посмотрите, выдает ли этоNumberFormatException
.
Ответ №1:
Вероятно, вам следует использовать
^-?d (.d )*$
^-?
гарантирует, что отрицательное значение принимается только в начале.