Regex ignora correspondência se estiver contido em uma string de 23 dígitos

Regex ignora correspondência se estiver contido em uma string de 23 dígitos

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:

insira a descrição da imagem aqui

Responder2

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

Isso captura a correspondência em seu primeiro subgrupo.

informação relacionada