Eu tenho uma regex onde pega o número do pedido, onde precisa começa com o número 4 e ter mais 9 dígitos e não pode ter número de pedido repetido, mas caso tiver algum número antes do 4 não pode pegar
Basta incluir um lookahead negativo verificando se antes do 4 não tem um número:
((?<!\d)4[0-9]{9}\b)(?!.*\1)
Repare também que para o 4 não precisa dos colchetes ([4] e 4 é a mesma coisa - de forma geral, se só tem um único caractere entre os colchetes, eles não são necessários).
A
alinelsilva
Nossa me ajudou bastante, muito obrigada, era isto mesmo que estava faltando. Obrigada!
A
alinelsilva
Uma dúvida, às vezes parece que a parte final para não colocar duplicado, mas mesmo assim pegar valor duplicado.
Como assim? Nesse caso ele só pega uma das ocorrências, veja.
A regex significa “O dígito 4 seguido de 9 dígitos, desde que essa mesma sequência não se repita à frente”.
Na linha [telefone removido] - NRo. Compra [telefone removido], a regex não pega o primeiro, porque depois o mesmo número se repete. Mas ela pega o segundo, porque depois dele o número não se repete.
Se for para pegar o número somente se ele ocorre apenas uma vez na linha, aí é mais fácil tratar fora da regex. Como o tópico tem a tag Java, então o código seria assim:
Stringtexto="[telefone removido] - NRo. Compra [telefone removido]";Matcherm=Pattern.compile("(?<!\\d)4[0-9]{9}\\b").matcher(texto);// pega a primeira ocorrênciaStringpedido=null;if(m.find()){pedido=m.group();}// verifica se tem mais ocorrênciasbooleanrepete=false;while(m.find()){if(pedido.equals(m.group())){repete=true;break;// se já repetiu, não precisa continuar}}if(repete){// pedido se repete, inválido (mostra mensagem de erro, etc)System.out.println("pedido se repete");}else{// pedido só ocorre uma vez, (ou nenhuma)if(pedido==null){System.out.println("Pedido não encontrado");}else{System.out.println("pedido="+pedido);}}