Регулярное выражение для соответствия 0 - 999, но не пустое - PullRequest
0 голосов
/ 18 июня 2010

Я работаю над регулярным выражением, чтобы сопоставить действительные целые числа, такие как:

  • 0
  • 1
  • 99
  • 999

Однако не следует разрешать сопоставление пустой строки.Самое близкое, что я могу получить:

(0)|\\d{1,3}

Что для меня говорит, что соответствующая строка будет иметь либо ноль, либо последовательность цифр длиной от 1 до 3 символов.Тем не менее, пустые строки по-прежнему соответствуют этому шаблону.Как правильно исключить пустые строки из этого регулярного выражения?

Ответы [ 4 ]

9 голосов
/ 18 июня 2010

Это будет соответствовать (только) серии от одной до трех числовых цифр (включая 0 или 00 или 01 или 012 - неясно, если эти последние требуются):

^\d{1,3}$

Это не будет совпадатьпустая строка (но тогда и ваше исходное извилистое выражение не будет).

(Чтобы разрешить это как часть большей строки, удалите якоря ^ и $.)

Но, возможно, регулярное выражение здесь не лучший вариант - разве используемый вами базовый язык не имеет функции isNumeric?

Чтобы разрешить 0, но не другие цифры с префиксом 0, вы можете использовать:

0|[1-9]\d{0,2}

Или, чтобы убедиться, что это полное совпадение:

^(?:0|[1-9]\d{0,2})$
5 голосов
/ 18 июня 2010

Как насчет этого?

^[1-9][0-9]{1,2}$|^\d$

Это будет соответствовать:

0
1
99
999

Но не будет совпадать:

01
001
1234
1 голос
/ 18 июня 2010

(0) | \ d {1,3}

Какова цель (0)|?\d - любая цифра, а 0 - цифра.\\d{1,3} должно быть в порядке.Или вам не нужны ведущие нули?

В любом случае, это либо проблема с движком регулярных выражений того, что вы используете, и / или вы делаете ненужный переход на \d там.Возможно, механизм регулярных выражений не поддерживает синтаксис {min, max}?

РЕДАКТИРОВАТЬ: Для тех, кто дает примеры, соответствующие началу и концу строк: почему вы предполагаете, что проверяемые строки будут содержать только однуцелые числа проверяются на?

0 голосов
/ 18 июня 2010
^[0-9]+$

должно работать: оно говорит, что существует число, любое от 0 до 9, по крайней мере, один раз от начала до конца строки.

Проверка с помощью grep -E: пустолинии ничего не печатают, пробел ничего не печатает, но 9 или 99 печатает 9 или 99.

Другой тест с perl:

#!/usr/bin/env perl

my @str = ('', ' ', '9', '99', '123');

foreach (@str) {
    print "$_ -> ";
    if (/^[0-9]+$/) {
    print "match\n";
    }
    else {
    print "not match\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...