Regex ignora a correspondência se contida na cadeia de 23 dígitos

1

Estou tendo um problema com uma solução para uma situação. Tenho essa regex para corresponder a uma sequência de dígitos específica:

(102030)\d{10}

Usando isso como dados de teste, recebo as seguintes correspondências:

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

O que estou tentando fazer é ignorar os casos em que há 23 dígitos na string, isso é possível usando apenas regex? Eu tentei com um olhar negativo em frente, mas não consegui alcançá-lo.

    
por Alfred Rapozo 22.09.2017 / 16:16

2 respostas

1

Para olhar para frente, você precisa de algo antes disso - então vamos começar com

\d

Em seguida, por negativo, antes dos próximos 22 dígitos:

(?!\d{22})

filtramos todas as linhas com 23 dígitos. Em seguida, pode seguir sua sequência original

(102030)\d{10}

Assim, a expressão regular completa será

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

Veja o resultado em regex101.com :

    
por 27.09.2017 / 17:03
0
\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

Isso captura a partida em seu primeiro subgrupo.

    
por 22.09.2017 / 16:47

Tags