[Java] aiuto espressioni regolari, con caratteri speciali

Sevenjeak

Utente Attivo
27 Nov 2012
80
2
8
31
sevenjeak.altervista.org
Sto utilizzando, da poco, le espressioni regolari in Java, ho fatto questo codice di prova:

Codice:
import java.util.regex.*;

public class regexp {
	public static void main(String[] args)
	{
		String str = "prova carattere speciale [cosa vedi?]";
		
		Pattern ptn = Pattern.compile("(.*)");
		Matcher mtc = ptn.matcher(str);
		
		while (mtc.find())
		{
			System.out.println(mtc.group(1));
		}
	}
}
E fin qui tutto bene, visto che ho detto all'espressione regolare di cercarmi qualsiasi carattere ripetuto più volte, quindi mi stampa tutta la stringa.

Il problema e quando vorrei cercare ti prendere il contenuto della stringa all'esterno e all'interno dei caratteri [ e ], modificando il mio codice cosi:

Codice:
public class regexp {
	public static void main(String[] args)
	{
		String str = "prova carattere speciale [cosa vedi?]";
		
		Pattern ptn = Pattern.compile("(.*)[(.*)]");
		Matcher mtc = ptn.matcher(str);
		
		while (mtc.find())
		{
			System.out.println(mtc.group(1));
                        System.out.println(mtc.group(2));
		}
	}
}
Eseguendo questo codice non mi viene restituito in output, io credo che il problema sia il carattere [, che lo considera come un carattere speciale, se è cosi come potrei risolvere?

P.S.: Ah.. vorrei chiedervi anche una piccola domanda. E' possibile recuperare il valore di mtc.group(1) e mtc.group(2) senza utilizzare il ciclo while?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Conosco poco il java però per l'espressione regolare prova cosi

Codice:
Pattern.compile("(.*)\[(.*)\]");
 

Sevenjeak

Utente Attivo
27 Nov 2012
80
2
8
31
sevenjeak.altervista.org
Si si, in effetti se non sbaglio, con le espressione regolare ci faceva cosi, ma, purtroppo, cosa che non mi spiego ho già provato in questo modo e mi restituisce errore: Invialid escape sequenze, per essere più sicuro ho riprovato, ma niente sempre la stessa cosa.

EDIT:

Ho risolto, grazie per l'aiuto, mi è bastato raddoppiare il segno in questo modo:

Codice:
Pattern.compile("(.*)\\[(.*)\\]");
Anche se non ho capito bene il perché il tuo codice, che avevo provato prima, mi restituisce errore.
 
Ultima modifica: