Expressão Regular

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.