Meta de Java RegEx (.) E ponto comum?

Em Java RegEx, como descobrir a diferença entre . (ponto) o caractere meta e o ponto normal como usamos em qualquer sentença. Como lidar com esse tipo de situação para outros meta-caracteres também como ( * , + , /d , …)

Se você quer que o ponto ou outros caracteres com um significado especial em expressões regulares sejam um caractere normal, você deve escaping com uma barra invertida. Como os regexes em Java são strings Java normais, você precisa escaping da própria barra invertida, então você precisa de duas barras invertidas, por exemplo, \\.

As soluções propostas pelos outros membros não funcionam para mim.

Mas eu encontrei isto:

para escaping de um ponto em java regexp write [.]

Expressões regulares no estilo Perl (nas quais o mecanismo regex Java é mais ou menos baseado) tratam os seguintes caracteres como caracteres especiais:

.^$|*+?()[{\ tem significado especial fora das classs de caracteres,

]^-\ tem um significado especial dentro das classs de caracteres ( [...] ).

Então você precisa escaping desses (e apenas daqueles) símbolos dependendo do contexto (ou, no caso de classs de personagens, colocá-los em posições onde eles não possam ser mal interpretados).

Escapar desnecessariamente de outros caracteres pode funcionar, mas alguns mecanismos de regex tratarão isso como erros de syntax, por exemplo \_ causará um erro no .NET.

Alguns outros levarão a resultados falsos, por exemplo \< é interpretado como um literal < em Perl, mas em egrep significa "limite de palavra".

Portanto, escreva -?\d+\.\d+\$ para corresponder a 1.50$ , -2.00$ etc. e [(){}[\]] para uma class de caracteres que corresponda a todos os tipos de parênteses / colchetes / parênteses.

Se você precisar transformar uma string de input do usuário em um formato seguro para regex, use java.util.regex.Pattern.quote .

Outras leituras: RegexGuru, de Jan Goyvaert, sobre metacaracteres que escapam

Escape caracteres especiais com uma barra invertida. \. , \* , \+ , \\d e assim por diante. Se não tiver certeza, você pode escaping de qualquer caractere não alfabético, seja ele especial ou não. Veja o javadoc para java.util.regex.Pattern para mais informações.

Eu queria corresponder uma string que termina com “. *” Para isso eu tive que usar o seguinte:

 "^.*\\.\\*$" 

Meio bobo se você pensar sobre isso: D Heres o que isso significa. No início da string, pode haver qualquer caractere zero ou mais vezes seguido por um ponto “.” seguido por uma estrela (*) no final da string.

Espero que isso seja útil para alguém. Obrigado pela coisa de backslash para Fabian.

Aqui está o código que você pode copiar diretamente e colar:

 String imageName = "picture1.jpg"; String [] imageNameArray = imageName.split("\\."); for(int i =0; i< imageNameArray.length ; i++) { system.out.println(imageNameArray[i]); } 

E se por engano houver espaços antes ou depois de "." em tais casos? É sempre uma boa prática considerar esses espaços também.

 String imageName = "picture1 . jpg"; String [] imageNameArray = imageName.split("\\s*.\\s*"); for(int i =0; i< imageNameArray.length ; i++) { system.out.println(imageNameArray[i]); } 

Aqui, \\ s * está lá para considerar os espaços e fornecer somente strings divididas.

Se você quiser terminar, verifique se a sua frase termina com “. “, Então você tem que adicionar [\. \ ] $ Ao final do seu padrão.

Eu estou fazendo um array básico no JGrasp e descobri que com um método de access para um array char [] [] usar (‘.’) Para colocar um único ponto.