Regexp работает на базе символов, а \d
означает одну цифру 0
... 9
, а не десятичное число.
Регулярное выражение, которое соответствует только целым числам со знаком, можетнапример,
^[-+]?[0-9]+$
означает
^
- начало строки [-+]?
- необязательно (это то, что означает ?
)знак минус или плюс [0-9]+
- одна или несколько цифр (плюс означает «одна или несколько», а [0-9]
- это еще один способ сказать \d
) $
-конец строки
Примечание: если считать знак частью номера, то это нормально, только если вам нужно разобрать только число .Для более общих синтаксических анализаторов, обрабатывающих выражения, лучше не включать знак в число: исходные потоки, такие как 3-2
, в противном случае могут быть проанализированы как последовательность из двух целых чисел вместо целого числа, оператора и другого целого числа.Мой опыт показывает, что отрицательные числа лучше обрабатываются постоянным сворачиванием унарного оператора отрицания на более высоком уровне.