Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Regex java testo tra parentesi.
Forum - Java - Regex java testo tra parentesi.

Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Segnala al moderatore
Postato alle 18:59
Giovedì, 28/10/2010
Mi stavo cimentando con le regex e java. Ora, molto probabilmente non ho capito io però avendo bisogno di ottenere tutte le stringhe tra parentesi ho ideato questa regex:
Codice sorgente - presumibilmente Plain Text

  1. \\(.{1,}\\)



Ora nella stringa "7*(32+5)*(80-3)"

lui trova corrispondenza, il problema è che trova 0 gruppi (o meglio uno solo) e precisamente questo:

(32+5)*(80-3)

che effettivamente è un gruppo giusto. La mia domanda è, però, perchè non si ferma alla prima parentesi chiusa che trova? E se volessi sapere tutto gli indici di inizio e di fine delle strighe tra parentesi?

PM
Avatar
marcouio (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:39
Venerdì, 29/10/2010
Non ho capito bene cosa vuoi fare: inserire una stringa tra parentesi? Non capisco. Io ho usato il regex per fare lo split di una stringa e inserire le sottostringhe create in una array. Spiegati meglio, please...

PM
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:52
Venerdì, 29/10/2010
Allora mettiamo che io abbia questa stringa qui:

7*(35+4)*(12+7)

quello che voglio sapere è dove inizia e finisce la prima parentesi (quindi gli int 2 e 6) e dove inizia a e finisce la seconda parentesi (quindi gli int 9 e 13) in pratica voglio sapere le posizioni di inizio e fine di ogni stringa tra parentesi.

PM
Avatar
marcouio (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 29/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:54
Venerdì, 29/10/2010
Sicuramente ci sarà una maniera più furba di questa, ma io l'ho risolta così:

Codice sorgente - presumibilmente Java

  1. HashMap<String, Integer> mappa = new HashMap<String, Integer>();
  2.                 String espressione = "7*(35+4)*(12+7)";
  3.                 //solo per verificare la correttezza della posizione stampo dove si trovano le prime espressioni
  4.                 System.out.println(espressione.indexOf("("));
  5.                 System.out.println(espressione.indexOf(")"));
  6.                 int x = 1,y=1;
  7.                 if(espressione.contains("(")&& espressione.contains(")")){
  8.                         for(int i=0; i<espressione.length(); i++){
  9.                                 if(espressione.substring(i, i+1).equals("(")){
  10.                                         mappa.put("aperta"+x, i);
  11.                                        
  12.                                         x++;
  13.                                 }
  14.                                        
  15.                                 else if(espressione.substring(i, i+1).equals(")")){
  16.                                         mappa.put("chiusa"+y, i);
  17.                                         y++;
  18.                                 }                              
  19.                         }
  20.                 }
  21.                 System.out.println(mappa.get("aperta1"));
  22.                 System.out.println(mappa.get("chiusa1"));
  23.                 System.out.println(mappa.get("aperta2"));
  24.                 System.out.println(mappa.get("chiusa2"));


PM