Oppure

Loading
28/10/10 16:59
paoloricciuti
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:
\(.{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?
aaa
29/10/10 18:39
marcouio
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...
aaa
29/10/10 18:52
paoloricciuti
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.
aaa
29/10/10 19:54
marcouio
Sicuramente ci sarà una maniera più furba di questa, ma io l'ho risolta così:

		HashMap<String, Integer> mappa = new HashMap<String, Integer>();
		String espressione = "7*(35+4)*(12+7)";
                //solo per verificare la correttezza della posizione stampo dove si trovano le prime espressioni
		System.out.println(espressione.indexOf("("));
		System.out.println(espressione.indexOf(")"));
		int x = 1,y=1;
		if(espressione.contains("(")&& espressione.contains(")")){
			for(int i=0; i<espressione.length(); i++){
				if(espressione.substring(i, i+1).equals("(")){
					mappa.put("aperta"+x, i);
					
					x++;
				}
					
				else if(espressione.substring(i, i+1).equals(")")){
					mappa.put("chiusa"+y, i);
					y++;
				}				
			}
		}
		System.out.println(mappa.get("aperta1"));
		System.out.println(mappa.get("chiusa1"));
		System.out.println(mappa.get("aperta2"));
		System.out.println(mappa.get("chiusa2"));
aaa