Iniciando Regex

opa opa…galera é o seguinte, comecei a estudar os motores regex…

mas não estou conseguindo usar direito ou não estou sanbendo traduzir a API.

quero entender os seguintes patterns:
f??
f*?

Então montei o seguinte código:

	public static void main(String[] args) {

		String palavra = "Diferencaf";
		
		Pattern p = Pattern.compile("[f??]");
		Matcher m = p.matcher(palavra);
		
		m.find();
		while (m.find())
			System.out.println("Encotramos :"+m.group() +" na posição : "+m.start());
	}

Se a tradução estiver correta ele deveria trazer UM ou NENHUM em tudo. A minha palavra tem DUAS letras “f”…e ele imprime que achou ela duas vezes. Então eu troquei para o pattern seguinte f*? Segundo a tradução nenhuma ou mais vezes…mas o resultado é o mesmo…

Então fiquei na mesma qual é a diferença e a aplicação correta disso ???

valews

Pra quem precisar…

http://java.sun.com/docs/books/tutorial/essential/regex/quant.html

O que acontece é o seguinte:

f?? procura pela letra f uma ou nenhuma vez. e Retorna todos os caracteres.

f*? faz a mesma coisa com a diferença de que * exibe todos os caracteres encontrados de uma vez só e f?? exibe caracter a caracter…

mais dúvidas o link é bastante explicativo…

[/]'s

Pelo meu pequeno conhecimento em regex, o que está acontecendo aí é que você está utilizando o [].
Se eu tiver uma expressão regular [abc], ele tentará casar qualquer o termo com os possíveis itens do conjunto, que neste caso é o a, b, c.

Acredito que a expressão regular está entendendo que você está procurando pelos literais f, * ou ?.

Tenta colocar realizar o teste com esse ex:

String palavra = “Difere*ncaf?”;

E me diz o que o código retorna.

Para quem quer saber direitinho Regex, é só acessar o site do sr. Aurélio:

http://www.aurelio.net/er/

Ou então ler este post:

http://www.javafree.org/javabb/viewtopic.jbb?t=5090