Регулярное выражение игнорирует совпадение, если оно содержится в строке из 23 цифр

Регулярное выражение игнорирует совпадение, если оно содержится в строке из 23 цифр

У меня возникла проблема с решением одной ситуации. У меня есть это регулярное выражение для сопоставления определенной последовательности цифр:

(102030)\d{10}

Используя это в качестве тестовых данных, я получаю следующие совпадения:

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

Я пытаюсь игнорировать случаи, когда в строке 23 цифры, возможно ли это, используя только регулярные выражения? Я пробовал с отрицательным просмотром вперед, но не смог этого добиться.

решение1

Для того, чтобы смотреть вперед, вам нужно что-то перед этим - так что начнем с

\d

Затем на отрицательные значения перед следующими 22 цифрами:

(?!\d{22})

мы отфильтровываем все строки с 23 цифрами. Затем может следовать ваша исходная строка

(102030)\d{10}

Таким образом, полное регулярное выражение будет

\d(?!\d{22})(102030)\d{10}

Посмотрите результат наregex101.com:

введите описание изображения здесь

решение2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

Это фиксирует матч в первой подгруппе.

Связанный контент