regex question - para corresponder uma string quando diferente de

2

Meu regex:

^[0-9]{9}_(010020)(004)-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

Para corresponder a seguinte string:

010020004_010020004-xxxxxxxxxxxxxxxxxx_20180105_1606

O acima funciona bem ... mas se eu quiser corresponder uma string quando não for igual a (004) em negrito. Eu tentei lookahead negativo (?! 004) que não corresponde a string

^[0-9]{9}_(010020)**(?!004)**-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

010020004_010020005-xxxxxxxxxxxxxxxxxx_20180105_1606

Estou sentindo falta de algo

    
por Krrp78 13.04.2018 / 16:21

1 resposta

0

Com base no seu padrão e na resposta do link : o seguinte padrão funciona no meu editor: ^[0-9]{9}_(010020).*(?<!004)-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

Acho que há um sublinhado extra em seu padrão após o sinal "+". E nós temos que combinar os últimos 3 caracteres antes de verificar se eles não são "004".

Dependendo da formatação exata, convém garantir que correspondamos apenas três dígitos: ^[0-9]{9}_(010020)([0-9]*(?<!004)){3}-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

    
por 13.04.2018 / 16:52