2013-12-05 6 views
-2

im пытается сделать регулярное выражение, но не может понять так хорошо.Регулярное выражение для диапазона чисел

Что я хочу, чтобы ввести следующее:

09XYZZZZZZ 

Где X от 6 до 9, Y 1 до 9, и Z 0 до 9. Все вместе, длина всего 12 цифр.

Спасибо!

+3

Пожалуйста, напишите что-нибудь, что вы пробовали, прежде чем обращаться за помощью. – joews

+2

http://gskinner.com/RegExr/ <- этот инструмент поможет вам лучше понять регулярное выражение в журнале. – Camron

+2

Вы говорите, что 12 в длину, но ваш образец имеет только 10. ??? –

ответ

2

Решение в значительной степени зависит от типа используемого регулярного выражения. В Perl регулярное выражение, например, вы можете написать:

/09[6-9][1-9][0-9]{6}/ 

Это точно соответствует строка 09, то ровно одна цифра от 6 до 9, то ровно одна цифра от 1 до 9, и, наконец, точно 6 цифр от 0 до 9.

В POSIX регулярное выражение {6} нотации не существует. Вам нужно будет повторить диапазон 6 раз.

Обратите внимание, что образец вашего образца составляет всего 10 цифр, в то время как в вашем описании указано 12 цифр. Если вы хотите, максимум 12 цифр, а также произвольное число Z в конце концов, вы можете использовать

/09[6-9][1-9][0-9]+/ 

в Perl или

/09[6-9][1-9][0-9][0-9]*/ 

в POSIX - + обозначения не существует там.

+0

Диапазоны существуют в POSIX regexp (оба BRE и ERE, хотя для них более часто встречающиеся BRE нужны обратные косые черты); '+' существует в ERE, но может быть эмулирован с помощью '\ {1, \}' в BRE. Остальное, конечно, правильно. – mirabilos

1
/^09[6-9][1-9][3-9]{6}.{2}$/ 

Это должно делать то, что вы хотите, если последние две цифры могут быть любыми, поскольку вы не указали их.

разбив его:

^ соответствует началу строки

09 спичек "09" точно

[6-9] и аналогичные определить диапазоны для символа

[3-9]{6} сказал, что мы хотим 6 вхождений между 3 и 9

.{2} означает 2 ничего.

1

На самом деле, POSIX имеет диапазоны, см. re_format(7).

Общими являются POSIX BASIC регулярных выражений:

09[6-9][1-9][0-9]\{6\} 

Отрегулировать от 6 до 8, если двенадцать цифр являются правильными.Вы можете написать это более гибкий диапазон номеров:

09[6-9][1-9][0-9]\{6,8\} 

Иногда у вас есть POSIX ERE, хотя:

09[6-9][1-9][0-9]{6} 

POSIX ERE поддержка + как PCRE, BRE не но вы можете использовать \{6,\} для открытого конца. Регулярное выражение POSIX не работает, как PCRE (см. Ответ Dominik для них), нужны разделители как часть регулярного выражения.

См perlre(1) и perlretut(1) для Perl регулярных выражений, к которым PCRE является в основном совместимы.

PHP использует PCRE в эти дни, на случай, если вам интересно.

Смежные вопросы