
Estou com um problema para encontrar uma solução para uma situação, tenho esse regex para corresponder a uma sequência de dígitos específica:
(102030)\d{10}
Usando isso como dados de teste, obtenho as seguintes correspondências:
75277887243040354513001
55345377243014107206375
810203087654135168 <- Match
1102030698798798477 <- Match
71020307248040361799581 <- Match
O que estou tentando fazer é ignorar casos onde existem 23 dígitos na string, isso é possível usando apenas regex? Tentei com uma visão negativa do futuro, mas não consegui.
Responder1
Para olhar para o futuro, você precisa de algo antes dele - então vamos começar com
\d
Então, por negativo à frente dos próximos 22 dígitos:
(?!\d{22})
filtramos todas as linhas com 23 dígitos. Então pode seguir sua string original
(102030)\d{10}
Portanto, a expressão regular completa será
\d(?!\d{22})(102030)\d{10}
Veja o resultado emregex101.com:
Responder2
\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b
Isso captura a correspondência em seu primeiro subgrupo.