
У меня возникла проблема с решением одной ситуации. У меня есть это регулярное выражение для сопоставления определенной последовательности цифр:
(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
Это фиксирует матч в первой подгруппе.