Регулярное выражение для соответствия одной из нескольких строк определенной длины [duplicate]

18
задан cletus 15 May 2009 в 01:34
поделиться

3 ответа

^(\d{3}|\d{6})$

У вас должен быть какой-то терминатор, иначе \d{3} будет соответствовать 1234. Вот почему я положил ^ и $ выше. Один из вариантов заключается в использовании поисковых запросов:

(?<!\d)(\d{3}|\d{6})(?!\d)

, чтобы убедиться, что ему не предшествует цифра (или в этом случае). Больше в Утверждения нулевой ширины Lookahead и Lookbehind .

27
ответ дан Alan Moore 31 August 2018 в 11:34
поделиться
  • 1
    Это выглядит хорошо, спасибо. Но что, если шаблон намного больше, чем просто \ d? Думаю, я мог бы сделать некоторую строчную интерполяцию при создании регулярного выражения, но есть ли лучший способ повторного использования под-шаблонов? – user 15 May 2009 в 01:46
  • 2
    В этом случае вы хотели бы использовать формат {1,2}, т. Е. ((& Lt; baseRegex & gt;) {3}) {1,2} – Alan Moore 15 May 2009 в 04:12

Как насчет:

(\d\d\d){1,2}

, хотя вам также понадобятся охранники с любого конца, которые зависят от вашего двигателя RE: что-то вроде:

[^\d](\d\d\d){1,2}[^\d]

или:

^(\d\d\d){1,2}$
7
ответ дан paxdiablo 31 August 2018 в 11:34
поделиться

Первый соответствует 3, 6, но также 9, 12, 15, .... Второй выглядит правильно. Вот еще один поворот:

\d{3}\d{3}?
1
ответ дан Sean Owen 31 August 2018 в 11:34
поделиться
  • 1
    Первое и второе? Если вы имеете в виду чужой ответ, вы должны сказать, какой он есть. Эти ответы не всегда появляются в одном порядке. – Alan Moore 15 May 2009 в 04:08
Другие вопросы по тегам:

Похожие вопросы: