Pergunta

Eu tenho uma lista separada por vírgulas de expressões regulares:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

Eu fiz uma divisão em ponto e vírgula.Agora estou tentando corresponder a este regex contra uma senha gerada.O problema é que Pattern.compile não gosta de colchetes que não é ignorado.Pode por favor me dar uma simples função que recebe uma string assim: [0-9] e retorna o escapado da cadeia \[0-9\].

Foi útil?

Solução

Você pode usar Pattern.quote(String).

A partir do google docs:

public static String quote​(String s)

Retorna um literal padrão String para o especificado String.

Este método produz uma Seqüência de caracteres que pode ser usado para criar um Padrão que iria coincidir com a seqüência s, como se fosse um literal padrão.

Meta-caracteres ou sequências de escape na seqüência de entrada será dado nenhum significado especial.

Outras dicas

Por alguma razão, a resposta acima não funcionou para mim. Para aqueles como eu que vêm depois, aqui está o que eu encontrei.

Eu esperava que uma única barra de barro escape do suporte, no entanto, você deve usar dois se tiver o padrão armazenado em uma string. A primeira barra de barragem escapa a segunda na corda, para que o que Regex vê é \]. Como Regex apenas vê uma barra de barriga, ele a usa para escapar do suporte quadrado.

\\] 

Em Regex, isso corresponderá a um único suporte quadrado de fechamento.

Se você está tentando corresponder a uma nova linha, por exemplo, você usaria apenas uma única barra de barriga. Você está usando o padrão de escape de string para inserir um caractere novo na string. Regex não vê \n - Ele vê o personagem Newline e corresponde a isso. Você precisa de duas barras de barriga, porque não é uma sequência de escape de cordas, é uma sequência de escape regex.

Você pode usar os caracteres q e e e especiais ... qualquer coisa entre q e e é escape automaticamente.

\Q[0-9]\E

Pattern.compile() Gosta de suportes quadrados muito bem. Se você pegar a corda

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

E dividi-lo em vírgulas, você acaba com cinco regexes perfeitamente válidos: o primeiro corresponde a oito caracteres não-vendidos, o segundo corresponde a um dígito ASCII e assim por diante. A menos que você realmente queira combinar strings como ".{8}" e "[0-9]", Não vejo por que você precisaria escapar de qualquer coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top