[Java] aiuto espressioni regolari, con caratteri speciali

Discussione in 'Java' iniziata da Sevenjeak, 23 Dicembre 2012.

  1. Sevenjeak

    Sevenjeak Utente Attivo

    Registrato:
    27 Novembre 2012
    Messaggi:
    80
    Mi Piace Ricevuti:
    2
    Punteggio:
    8
    Sesso:
    Maschio
    Home Page:
    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?
     
  2. Nefyt

    Nefyt Utente Attivo

    Registrato:
    17 Aprile 2012
    Messaggi:
    1.102
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Conosco poco il java però per l'espressione regolare prova cosi

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

    Sevenjeak Utente Attivo

    Registrato:
    27 Novembre 2012
    Messaggi:
    80
    Mi Piace Ricevuti:
    2
    Punteggio:
    8
    Sesso:
    Maschio
    Home Page:
    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: 23 Dicembre 2012
Sto caricando...

Condividi questa Pagina