Estou tentando criar uma expressão regular que pegue todas as palavras dentro de uma String que estejam entre (# e #),
exemplo:
este é um teste de (#palavra#) para expressao regular…
e me retorne
palavra
com um caracter consigo tipo entre #, mas com dois não estou conseguindo…
alguém têm uma idéia…
String s = "este é um teste de (#palavra#) para expressao regular... ";
Pattern pat = Pattern.compile ("#([^#]+)#");
Matcher mat = pat.matcher (s);
while (mat.find()) {
System.out.println (mat.group()); // imprime, neste caso, "palavra"
}
valeu, muito obrigado, honorável colega…
acho que assim também funciona: “#(.+?)#”
O “?” é um reluctant quantifier. Ou seja, ele vai parar quando achar o primeiro “#”.
Dê uma olhada aqui em quantifiers:
http://java.sun.com/docs/books/tutorial/essential/regex/quant.html
Testando e olhando melhor, os exemplos não funcionam já que quero pegar somente as palavras entre (# e #).
exemplo:
este é um exemplo de (#palavra#) ja este nao vale #invalido mas este sim e (#valido#)…
a expressão deve me retornar somente:
palavra
valido
Ah, você quer uma palavra mesmo (suponho que letras e dígitos no máximo).
http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html
String s = "este é um teste de (#palavra#) para expressao regular... ";
Pattern pat = Pattern.compile ("#([\\p{L}\\d]+)#");
Matcher mat = pat.matcher (s);
while (mat.find()) {
System.out.println (mat.group()); // imprime, neste caso, "palavra"
}
\p{L} quer dizer qualquer letra Unicode, ou seja, A-Z, a-z ou mesmo um ideograma chinês ou uma letra em árabe ou russo.
\d quer dizer qualquer dígito.
No exemplo, onde está
System.out.println (mat.group());
troque por
System.out.println (mat.group(1));
Vai funcionar do jeito que vc quer.