Следующий фрагмент кода прекрасно компилируется в Java 8, но без нового оператора будет неоднозначным:
import java.util.function.IntBinaryOperator;
public class A {
public static IntBinaryOperator addThemUp;
public static int addThemUp(int i1, int i2) {
return i1 + i2;
}
public static void main(String[] args) throws Exception {
IntBinaryOperator operator = A::addThemUp;
}
}
Не ясно, относится ли A.addThemUp
к общедоступному полю IntBinaryOperator
. или это попытка создать ссылку на метод.
Да, это немного надумано. Но вы не можете разрешить крайние случаи в синтаксисе языка программирования .
РЕДАКТИРОВАТЬ: Изменено, чтобы соответствовать другой обратной связи.
Я понял, что вы имели в виду, что если нет десятичной точки, то не должно быть больше двух цифр. Так должно быть:
\d{0,2}(\.\d{1,2})?
Это должно помочь в большинстве реализаций. Если нет, вы можете использовать:
[0-9]?[0-9]?(\.[0-9][0-9]?)?
И это должно работать во всех реализациях, которые я видел.
Чтобы опираться на ответ Ли, вам нужно привязать выражение, чтобы удовлетворить требованию не иметь более двух чисел перед десятичной дробью.
Если каждое число представляет собой отдельную строку, вы можете используйте привязки строк :
^\d{0,2}(\.\d{1,2})?$
Если каждое число находится в строке, вы можете использовать привязки слов :
\b\d{0,2}(\.\d{1,2})?\b
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
Соответствует:
Не соответствует:
Вы упомянули, что хотите, чтобы регулярное выражение соответствовало каждой из этих строк, но ранее вы упомянули, что перед десятичной дробью стоит 1-2 цифры?
Это будет соответствовать 1-2 цифрам, за которыми следует возможное десятичное число, за которым следует еще 1-2 цифры, но НЕ ИСПОЛЬЗУЕТСЯ в вашем примере .33
\d{1,2}\.?\d{1,2}
Это будет соответствовать цифрам 0-2, за которыми следует возможное десятичное число, за которым следуют еще 1-2 цифры, и совпадет в вашем примере с .33
\d{0,2}\.?\d{1,2}
Не уверен точно какой именно вы ищете.
A предыдущий ответ в основном правильный, но он также будет соответствовать пустой строке. Следующее может решить эту проблему:
^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$
^(\d{0,2}\\.)?\d{1,2}$
\ d {1,2} $
соответствует 1-2-значному номеру, после которого ничего не указано ( 3
, 33
и т. Д. .), (\ d {0,2} \.)?
соответствует необязательному числу длиной от 0 до 2 цифр, за которым следует точка ( 3.
, 44.
, .
и т.д.). Соедините их вместе, и вы получите регулярное выражение.