Dúvida com regex

5 respostas
Flasoft
Pattern p = Pattern.compile("?????????");
		Matcher m = p.matcher("11     ^ (3 - 9 )*1+  3");
		
		while(m.find()) {
			System.out.print(m.group() + "_");
		}
		System.out.println("\nend");

Alguem tem a manha de criar uma expressão capaz de separar estes simbolos?

"11 ^ (3 - 9 )*1+ 3" = .11.^.(.3.-.9.).*.1.+.3.

já perdi umas 4 horas tentando... é para um trabalho.

5 Respostas

Foxlol

Utilizando o replace da classe String num rola ? Substituindo por vazio talvez, naum sei se entendi bem.

Flw

C

Mas nao entendi me explica em que partes vc quer separar essa expressao

Flasoft
Fiz um programa capaz de resolver expressôes matematicas, por ex:
x ^ 2 + 55 / ( 11 + cos 3 ) = 0
atualmente eu faço isto:
String elementos[] = expressao.split(" ");

mas o usuario tem que colocar extamente 1 espaço entre cada simbolo. Ex : a expressão acima.

se ele digitar:
x ^       2+55   /( 11 +cos3) =0

não funciona, pq tem simbolos que não tem espaço ou tem espaço d+.

então fiz isto:
String elementos[] = expressao.split("\s+");

que resolve o problema de multiplos espaços mas não o de não ter espaço.

Imagino fazer algo assim:

Pattern p = Pattern.compile("[\s+\+\*[cos][sen]]"); //assim por diante.
 		Matcher m = p.matcher("11     ^ (3 - 9 )*1+  3");
 		
 		while(m.find()) {
 			System.out.print(m.group() + "_");
 		}
 		System.out.println("\nend");
mas nâo funciona. Algo q seja capaz de separar simbolos como NUMEROS, cos, sen, tan, +, -, *, /, (,),[,];

Obrigado pela atenção...

Mantu

Embora eu ache que regex não é o mais apropriado para esse caso, você pode tentar algo assim:

package help.guj.flasoft;

public class Regex {
	public static void main(String[] args) {
		String str = "x ^       2+55   /( 11 +cos3) =0";
		
		/*
		 * Primeiro passo: Cercar com espaços as palavras, os números e os símbolos
		 */
		String spaceSurrounded = str
			.replaceAll("(\W)", " $1 ")//Cerca com espaço qq caractere que não for uma letra, número ou "_"
			.replaceAll("(\D)(\d)", "$1 $2")//Separa qualquer não-dígito de um dígito
			.replaceAll("(\d)(\D)", "$1 $2")//Separa qualquer dígito de um não-dígito
		;
		
		/*
		 * Segundo passo: eliminar todos os espaços
		 */
		String singleSpaced = spaceSurrounded.replaceAll("\s+", " ");

		/*
		 * Terceiro passo: Aparar os espaços no início e no final
		 */
		String result = singleSpaced.trim();
		
		/*
		 * E pronto!
		 */
		System.out.println(str + "\r\n" + result);
	}
}
Flasoft

Muito Obrigado…

Ja tinha tentado um monte…

E tb eu não sabia q replaceAll daria pra utilizar regex

Valeu…
[]s

Criado 21 de abril de 2007
Ultima resposta 22 de abr. de 2007
Respostas 5
Participantes 4