Сбой с регулярным выражением - PullRequest
1 голос
/ 16 марта 2011

Я пишу код на Java.

Я пытаюсь написать обычное исключение, которое соответствует этому правилу:

  • ввод должен состоять только из цифр.
  • вход должен
    • начинаться только с 03 или 02, или с 08, или с 09, или с 04
    • , а затем должен иметь только 1, 2, 3 или 7 цифр.

пример:

успешные входы:

 031, 0822, 097777777

неудачные входы:

 06, 0622, 09666666, 084444.

Я пытался сделать это, но не могу сделать это правильно.

 ^0([23894]\d{1}|\d{2}|\d{3}|\d{7})

спасибо всем,

луч.

Ответы [ 5 ]

2 голосов
/ 16 марта 2011

Все идет не так, как вы ожидаете, потому что ваше регулярное выражение:

^0([23894]\d{1}|\d{2}|\d{3}|\d{7})

фактически означает:

^0
(
  [23894]\d{1}   // b1
  |              // OR  
  \d{2}          // b2
  |              // OR
  \d{3}          // b3
  |              // OR
  \d{7}          // b4
)

Таким образом, он соответствует 0 в начале, за которым следует либо b1, b2, b3 или b4.

Попробуйте вместо этого:

^0[23894](\d{1,3}|\d{7})$
2 голосов
/ 16 марта 2011

Вы испортили группировку. Попробуйте

^0[23894](?:\d|\d{2}|\d{3}|\d{7})$

Чтобы понять почему:

^a(bc|d)$

соответствует abc или ac, а не abd.

1 голос
/ 16 марта 2011

Попробуйте изменить его на ^0[23894](\d{1,3}|\d{7})$ (не проверено). То, что вы написали, ищет 0, за которыми следуют либо 2,3,8,9,4 и еще одна цифра, либо две цифры, либо три цифры, либо семь цифр. {1,3} указывает диапазон повторения 1-3 появления.

$ привязывает выражение в конце строки; если вы его опустите, любая строка, начинающаяся с шаблона, будет действительной.

0 голосов
/ 16 марта 2011

попробуйте это:

^0([23894](1|2|3|7)*)
0 голосов
/ 16 марта 2011

Есть две проблемы с этим:

  1. У вас были круглые скобки в неправильном месте, вы должны чередовать только длину цифр в конце
  2. Вам нужен символ "конец строки в конце", чтобы убедиться, что он соответствует начальным цифрам, а затем 1/2/3/7 других цифр

    попробуйте это:

    = 0 [23894] (\ d {1} | \ д {2} | \ д {3} | \ д {7}) $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...