Dúvida Expressão Regular

Pessoal, eu sou novato em expressão regular e estou tendo algumas duvidas.
Nos metodos getData() e getLanguage() estou passando a mesma pagina HTML para eles para extrairem a data e a linguagem. O código em si é bem simples, e está funcionando, só que eu acredito que estou ocupando o mesmo espaço na memoria duas vezes, queria saber como posso fazer para passar todas as expressões que eu construir lendo apenas uma vez a minha pagina HTML, e não fazer um metodo toda vez que eu usar uma expressão, ae vai o codigo,
Valeu pessoal, :lol:
felixcomputer

public String getData(String cachedProjectPage) 
	{
		try
		{
			Pattern expression = Pattern.compile("Registered : (.*?)\n");
			Matcher matcher = expression.matcher(cachedProjectPage);
			while ( matcher.find() )
				return matcher.group(1);
		}
		catch(Exception e)
		{
			new Exception("Não pude extrair a data registrada");
		}
		return null;
	}
	
	public String getLanguage(cachedProjectPage) 
	{
		try
		{
			Pattern expression = Pattern.compile("Programming Language :\n \s*<a href=(.*?)>(.*?)<");
			Matcher matcher = expression.matcher(cachedProjectPage);
			while ( matcher.find() )
				return matcher.group(2);
		}
		catch(Exception e)
		{
			new Exception("Não pude extrair a Linguagem registrada");
		}
		return null;
	}

que tal assim:

public String getPattern(String cachedProjectPage, String pattern, int group) throws Exception { { Pattern expression = Pattern.compile(pattern); Matcher matcher = expression.matcher(cachedProjectPage); if( matcher.find() ) return matcher.group(group); return null; }

aí para usar:

try {
    getPattern(cachedProjectPage, "Registered : (.*?)\n", 1);
}
catch (Exception e) {
    new Exception("Não pude extrair a data registrada");
}

que tal assim?

flw

[edit]só precisa melhorar o nome desse método hehehe

Olá dudaskank,

Gostei muito da forma que vc escreveu, a minha forma estava meio desnecessária, contudo, acredito que ainda naum resolvi o meu problema, pq ainda assim eu estaria passando a cachedProjectPage para todos os metodos que eu fizesse, e acredito, naum tenho certeza, que a cada vez que eu passe a pagina como argumento, ele vai ocupar o mesmo espaço na memoria n vezes, sendo n, o numero de expressões, métodos, e são muitas, contudo eu queria uma forma de pesquisar as n expressões passando a pagina apenas uma vez, visto que a pagina sempre é a mesma, passar uma vez a cachedProjectPage e pesquisar todas as expressões como posso dizer “de uma vez”, mas ou menos, conseguiu me entender?

Obrigado pela ajuda,
Samuel

Se vc puder me resolver isso…
:smiley:

Ve se algo como isso aqui funciona:

...
	private static final String MY_REGEX = 
		"(?:Registered : (.*?)\n)|(?:Programming Language :\n \s*<a href=.*?>(.*?)<)"
	;
	...
	public String[] getAllInfoIWant(String src, String regex){
		ArrayList result = new ArrayList();
 		try
 		{
 			Pattern expression = Pattern.compile(regex);
 			Matcher matcher = expression.matcher(src);
 			while ( matcher.find() )
 				result.add(matcher.group(1));
 			return (String[])result.toArray(new String[0]);
 		}
 		catch(Exception e)
 		{
 			new Exception("Não pude extrair a informação");
 		}
 		return null;
 	}
...

A idéia do método acima é retornar um array de String com todas as ocorrências, indistintamente. Depois podemos pensar em alguma coisa pra diferenciar as posições do array…
Experimenta aí, e qq dúvida, de um toque

Oi felixcomputer

Em Java, todos os objetos são passados por referência, ou seja, você não copia todo ele pra memória, só copia o endereço dele e o método usa o mesmo objeto, e não a cópia dele. Até agora pouco tinha alguém perguntando sobre isso mesmo…

Mas enfim, ele não vai ocupar todo o espaço dele não, não se preocupe.

flw