Expressões Regulares com variáveis [Resolvido]

Pessoal,

Estou precisando fazer uma verificação usando expressões regulares utilizando variáveis no lugar das strings literais. Tentei da seguinte forma, mas está dando erro de compilação:


String var1 = "Java";
String var2 = "Minha linguagem favorita é Java";

Pattern padrao = Pattern.compile("*"+var1+"*");   // pelo menos a "intenção" é verificar a palavra Java dentro de uma cadeia de caracteres.
 
Matcher pesquisa = padrao.matcher(var2);    
  
if (pesquisa.matches())    
{   
        System.out.println("Achei a palavra 'Java' na sentença");   
}   
else    
{   
        System.out.println("A palavra 'Java' não existe");   
}  

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

Tenta: String pattern = “.Java.”;

Altere a linha onde vc informa a regex:Pattern padrao = Pattern.compile(var1);E altere a verificação: if (pesquisa.find())

Blz? Flw! :thumbup:

A sua expressão regular está errada - se você quer procurar a palavra Java, você tem de usar:

“.Java.

. = qualquer caracter

  • = repetição do padrão anterior (no caso o “.”) zero ou mais vezes

Se a palavra contiver caracteres de expressões regulares, então ela deve ser “quoted”. Então na verdade você faria assim:

“.\Q" + palavra + "\E.

\Q inicia uma seqüência que deve ser aceita literalmente, e \E termina essa seqüência.

[quote=thingol]A sua expressão regular está errada - se você quer procurar a palavra Java, você tem de usar:

“.Java.

. = qualquer caracter

  • = repetição do padrão anterior (no caso o “.”) zero ou mais vezes

Se a palavra contiver caracteres de expressões regulares, então ela deve ser “quoted”. Então na verdade você faria assim:

“.\Q" + palavra + "\E.

\Q inicia uma seqüência que deve ser aceita literalmente, e \E termina essa seqüência.[/quote]
No caso, como ele está procurando uma palavra fixa ao invés de um padrão, e por não levar em conta a quantidade de incidências, pode-se utilizar apenas “Java” com ER e ele vai obter o resultado positivo caso a palavra esteja lá, não é? Ou estou enganado?

Obrigado, funcionou blz! Mas está com um probleminha…

Eu preciso que o método encontre a palavra apenas se ela for completa:

Se

String palavra = “STU”;

e

Minha frase na outra variável for

String = “An Empirical STUDY of Communication in Code”,

a resposta deve ser FALSE, e ele está retornando TRUE por causa da palavra STUDY.

Como resolvo isto, por favor?

Valeu!

Para que a palavra seja “completa” ela precisa estar entre espaços, certo?
Se for isso que você considera como “palavra completa”, isso aqui resolveria:

“\s+STUDY\s+”

Um detalhe é que no caso do seu texto ter várias linhas, se a palavra que vc procura estiver no fim de uma linha, não haverá um espaço após a mesma, mas sim uma quebra de linha. Neste caso você precisa incluir este padrão também na expressão regular.

Existe o padrão “\b” que força essa verificação de palavras. É que nem sempre a palavra está cercada por espaços; ela pode ter um ponto ou uma vírgula depois, por exemplo.
Um exemplo:

 public class TesteRE {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		String texto = "Size this is o Size of test SizeOla";
 		String replaced = texto.replaceAll("\\bSize\\b","tamanho");		
 		System.err.println("REPLACED:"+replaced);
	}
 
}

A saída deste programa é:

REPLACED:tamanho this is o tamanho of test SizeOla

Pessoal, funcionou blz!

Muito obrigado a todos.

Abs.