Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    errore espresione regolare

    Salve, data l'espressione :
    String esprss="(AB((CD)R)FA(RZS)(CS(RT)B))";

    volevo scrivere un' espressione regolare che mi permettesse di individuare le sottoespressioni presenti in esprss (cioè i blocchi di parentesi che compongono una sottoespressione)

    dall'espressione sopra dovrei avere:

    1 ((CD)R)
    2 (RZS)
    3 (CS(RT)B)

    spero di essermi spiegato
    codice:
    public class MacinaStringhe_2 {
    
    	public static void main(String[] args) {
    
                    String esprss="(AB((CD)R)FA(RZS)(CS(RT)B))"; 
    
    /*non sono riuscito a scrivere il pattern corretto in quanto dovrebbe accettare lettere e parentesi che devono essere di un numero pari ,quindi in coppia di ().
    tipo --> (CS(RT)B) 
    
    solo per le lettere farei cosi  [A-B]+ .Ma per riconoscere pure le parentesi??
    ps help me non ho mai usato le espr regolari...sono in difficoltà.
    
    */
    		Pattern pattern = Pattern.compile(" ....   ");		
    		Matcher matcher = pattern.matcher(espr);
    		
    		 while(matcher.find()) {
    			    System.out.println("Sottosequenza : "+matcher.group());
    			    System.out.println("Sottogruppo 1 : "+matcher.group(1));
    			  }		
    	}
    
    }

  2. #2
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Mi sembra di ricordare che le parentesi siano opzioni speciali nell'espressioni regolari di Java. La stringa da "matcha" quell'espressione è
    codice:
    \([A-Z]+\)
    (se scrivi questa espressione direttamente nel codice devi usare due controbarre al posto di una). Ora non ricordo le opzioni da passare al "compilatore di pattern" per dirgli di riconoscere ogni sottosequenza possibile; fai qualche prova.

    Ciao

  3. #3
    Guarda il mio problema principale è che non so come far stampare solo i blocchi massimali:

    io ho scritto questo pattern Pattern pattern = Pattern.compile("([(]([A-Z]+)+[)])");
    che ad esempio su questa stringa (AB(CD)(UVZ)(GR(ST)))

    mi da:
    (CD)
    (UVZ)
    (ST)
    solo che a me servirebbe un pattern che al posto di (ST) mi stampasse il blocco principale dove è contenuto ,quindi:

    (CD)
    (UVZ)
    (GR(ST))

    non so se mi sono spiegato

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Sì, però non si possono aprire discussioni a profusione tutte sullo stesso identico problema.
    O, quantomeno, se hai deciso di cambiare approccio, segnalalo e non risollevare le altre.

    Oltre a questa discussione hai aperto questa e questa.

    Tengo aperta l'ultima (che l'hai aperta oggi) e chiudo tutte le altre.

    In futuro, se decidi di cambiare approccio, segnalalo e, se è comunque in tema con la discussione, continua la discussione già esistente, senza aprirne altre.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.