publicstaticvoidmain(String[]args){Patternp=Pattern.compile("\d{1,}");Matcherm=p.matcher("fhj");if(!m.find()){System.out.println("Não começa com número");}}
Abraço…
T
thingol
Expressões regulares não são adequadas para dizer não. Elas são adequadas para dizer “sim”. Tanto é que o “grep”, que é uma ferramenta que filtra texto baseado em expressões regulares, tem a opção “-v” para “inverter” a expressão regular.
O correto, em um programa de produção, é você construir a expressão regular que BATE com aquela coisa, e então negar a condição. No seu caso, você faria algo como:
// Expressão regular: começa com um número OU é a palavra foo OU é a palavra barStrings="abacaxi";if(!s.matches("(\d+.*|foo|bar)"){System.out.println("s não começa com número, nem é foo, nem é bar");}else{System.out.println("s começa com número, ou é foo, ou é bar");}
T
thingol
De qualquer maneira, só para você saber, existe uma forma de negar coisas na expressão regular, mas é um bocadinho complexo.
classTesteRegex6{publicstaticvoidmain(String[]args){String[]testes={"abacaxi","123 de Oliveira 4","foo","bar","42"};for(Stringt:testes){System.out.println(t.matches("(?!(\d+.*|foo|bar)).*"));}}}
Eu digo “existe” mas nem sempre funciona direito, portanto é aconselhável você usar sempre a forma positiva da expressão regular, não a negativa, conforme eu mostrei acima. E além disso a forma negativa é MUITO mais lenta que a forma positiva; use sempre a forma normal da expressão regular.
Mikhas
e como eu faço a exclusão de algumas palavras?
T
thingol
Você não leu minha expressão regular? Ela exclui, como você pediu, “foo” e “bar”.
Mikhas
Eu não havia atualizado a pagina,
não vi sua resposta.