No Java RegEx, como descobrir a diferença entre .
(ponto) o meta caractere e o ponto normal, como usamos em qualquer frase. Como lidar com esse tipo de situação para outros personagens meta também como ( *
, +
, \d
, ...)
150
Se você deseja que o ponto ou outros caracteres com um significado especial nas expressões regulares seja um caractere normal, é necessário escapá-lo com uma barra invertida. Como as expressões regulares em Java são cadeias Java normais, é necessário escapar da 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 isso:
escapar de um ponto em java regexp write
[.]
fonte
\\.
não funcionou para mim:\.
se queixou de que.
não precisa ser escapado,\\.
fez pensar que era\.
, em vez de.
,\\\.
eo construtor jogou um erro,[.]
foi a única coisa que funcionou.\\.
dentro de uma string literal dá a você o\.
que o regex precisa para ver o ponto como um ponto literal, em vez de qualquer caractere correspondente.Expressões regulares no estilo Perl (nas quais o mecanismo regex Java se baseia mais ou menos) tratam os seguintes caracteres como caracteres especiais:
.^$|*+?()[{\
tem significado especial fora das classes de personagens]^-\
tem um significado especial dentro das classes de caracteres ([...]
).Portanto, você precisa escapar desses (e apenas esses) símbolos, dependendo do contexto (ou, no caso de classes de caracteres, colocá-los em posições onde eles não possam ser mal interpretados).
Escapar desnecessariamente de outros caracteres pode funcionar, mas alguns mecanismos de expressão regular tratam isso como erros de sintaxe, por exemplo
\_
, causarão um erro no .NET.Alguns outros levarão a resultados falsos, por exemplo,
\<
é interpretado como um literal<
em Perl, masegrep
significa "limite de palavras".Portanto, escreva
-?\d+\.\d+\$
para combinar1.50$
,-2.00$
etc. e[(){}[\]]
para uma classe de caractere que corresponda a todos os tipos de colchetes / chaves / parênteses.Se você precisar transformar uma sequência de entrada do usuário em um formato seguro para regex, use
java.util.regex.Pattern.quote
.Leitura adicional: RegexGuru, blog de Jan Goyvaert, sobre como escapar de metacaracteres
fonte
Escape de caracteres especiais com uma barra invertida.
\.
,\*
,\+
,\\d
, E assim por diante. Se você não tiver certeza, poderá escapar de qualquer caractere não alfabético, seja ele especial ou não. Consulte o javadoc para java.util.regex.Pattern para obter mais informações.fonte
Aqui está o código que você pode copiar e colar diretamente:
E se por engano houver espaços deixados antes ou depois de "." em tais casos? É sempre uma boa prática considerar esses espaços também.
Aqui, \\ s * existe para considerar os espaços e fornecer apenas as strings divididas necessárias.
fonte
Queria corresponder uma string que termina com ". *" Para isso, tive que usar o seguinte:
Meio bobo se você pensar bem: D Aqui está o que isso significa. No início da string, pode haver qualquer caractere zero ou mais vezes, seguido de um ponto "." seguido por uma estrela (*) no final da string.
Espero que isso seja útil para alguém. Obrigado pela coisa de barra invertida para Fabian.
fonte
"\\.\\*$"
então. Não há necessidade de corresponder ao início da string, se isso não for importante para você.Se você quiser terminar, verifique se a sua frase termina com ". ", Então você deve adicionar [\. \ ] $ Ao final do seu padrão.
fonte
Estou fazendo uma matriz básica no JGrasp e descobri que, com um método acessador, uma matriz char [] [] usa ('.') Para colocar um único ponto.
fonte