Java регулярное выражение для совпадения повторяющихся номеров, а не 0, 1 - PullRequest
0 голосов
/ 04 декабря 2018

Мне нужно написать шаблон, который соответствует 11 цифрам, которые начинаются с 012, и две цифры после 012 не должны быть 0,1 и должны повторяться.например: 01244521478 - «истина» или 01266235698 - «истина», а 01200256354 - «ложь».Я попробовал этот шаблон: "012(.)\\1{1}([\\d]{6}$)", но я не знаю, где сказать 0,1 не допускается после 012.помогите мне пожалуйста

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

В вашем регулярном выражении вы используете (.)\\1, который будет захватывать любой символ в группе и ссылаться на это будущее, используя обратную ссылку, которая, например, также будет соответствовать 012$$521478

Что вы можете сделать, это изменить (.)\\1) чтобы соответствовать цифрам от 2 до 9, как ([2-9])\\1.Вы можете опустить вторую группу захвата, если вы не ссылаетесь на это в своем инструменте или коде.{1} можно опустить, а [\\d] можно записать как \\d

Обновленное регулярное выражение может выглядеть следующим образом:

^012([2-9])\1\d{6}$

В Java:

String regex = "^012([2-9])\\1\\d{6}$";

Regex demo | Java demo

Объяснение

  • ^ Утверждение начала строки
  • 012 совпадать буквально
  • ([2-9]) Захват в группе цифр 2-9
  • \1 обратная ссылка на первую группу захвата
  • \d{6} совпадение с 6 цифрами
  • $ Утвердить конец строки
0 голосов
/ 04 декабря 2018

Ваше регулярное выражение 012(.)\1{1}([\d]{6}$) в порядке, но не может позаботиться о том, чтобы ваши 4-я и 5-я цифры не должны быть 0 или 1 и должны повторяться требования.Также {1} не требуется, так как это неявно по умолчанию.Используйте его только в том случае, если значение в скобках curley больше одного или диапазона, подобного этому {2} или {1,5}

Это регулярное выражение должно соответствовать вашим потребностям,

^(?=\d{11}$)012([^01])\1\d{6}$

Объяснение:

  • ^ -> начало строки
  • (?=\d{11}$) -> Позитивный взгляд вперед, чтобы убедиться, что он содержит только цифры и точно равен 11цифры.Зачем это нужно из-за [^01] для отрицания 0 и 1, но не для разрешения любых других символов.
  • 012 -> Совпадает с 012 буквально
  • ([^01])\1 -> theСледующие две цифры будут повторяться и могут быть чем угодно, кроме 0 и 1
  • \d{6} -> Соответствует любым шести цифрам
  • $ -> Конец ввода

Демо

...