Preciso fazer uma expressão regular para o seguinte nome: Indicadores Thiago_06/05/2019 fiz o seguinte: ^Indicadores\\sThiago_\\d{2}/\\d{2}/\\d{4}$
. Ao testar meu programa em java não encontra o nome com minha expressão.
import java.util.regex.*;
class Program {
public static void main (String[] args) {
String s = "Indicadores Thiago_06/05/2019";
Pattern p = Pattern.compile("^Indicadores\\sThiago_\\d{2}/\\d{2}/\\d{4}$");
Matcher m = p.matcher(s);
System.out.println("Deu match? " + m.matches());
}
}
Ivbarbosa
A expressão que eu fiz aparentemente está certa mas no meu código aonde tenho que ler o titulo de um e-mail com essa expressão ele me retorna nada. Então fiquei na dúvida se minha expressão estava certa, mas executando seu código vi que ela esta correta.
private static final String ASSUNTO_EMAIL = “^Indicadores\sThiago_\d{2}/\d{2}/\d{4}$”;
Eu fiz de tudo mas meu código com essa expressão não encontra o arquivo.
^Indicadores\\sThiago_\\d{2}/\\d{2}/\\d{4}$"
Você está pegando uma lista e comparando com seu regex?
Estou usando stream.
private boolean filtraAssunto(Message msg) {
try { boolean x = msg.getSubject() != null && msg.getSubject().toLowerCase().contains(ASSUNTO_EMAIL.toLowerCase()) && Arrays.stream(msg.getFrom()).anyMatch(a -> a.toString().contains(REMETENTE)) && contemAnexoNoPadaro(msg); return x; } catch (MessagingException e) { e.printStackTrace(); } return false;
}
Experimente assim ^Indicadores\\sThiago_\\d{2}\/\\d{2}\/\\d{4}$
Adcionei uma barra depois das chaves[
no regex101 deu certo
Marcos,
Tentei com o seu regex e mesmo assim não deu certo. Ele não encontra meu arquivo.
Obs. Coloquei barra dupla depois das chaves porque o Eclipse acusa erro.
Regex: ^Indicadores\\sThiago_\\d{2}\\/\\d{2}\\/\\d{4}$
Faça uma prova de conceito e veja se realmente o problema está no seu REGEX ou na lógica.