# Regex auslesen des Wertes zwischen "=" und "&"



## DirkHo (12. November 2009)

Hallo,

wie kann ich denn bitte in einem String die Zeichen zwischen einem "=" und einem "&" auslesen OHNE dass "=" und "&" davor gestellt werden?

Ich habe in etwa folgenden String "Dies ist mein Termin =12.11.2009, 13:30 Raum 105& und der ist einzuhalten =einverstanden&" (um es mal plastischer darzustellen...

Nun habe ich mir folgendes gebastelt:


```
Pattern p = Pattern.compile("=(.*?)&");
	    	    Matcher m = p.matcher(input);

	    	    while (m.find()) { 
	    	    	  System.out.println(m.group());
	    	    }
```

Was als Resultat folgendes ausgibt:



> =12.11.2009, 13:30 Raum 105&
> =einverstanden&



Das "=" und "&" möchte ich aber nicht mit ausgegeben haben...

Habe bisher nur PHP-Erfahrung mit RegEx, wobei das auch da schon immer eine Fuddelarbeit ist, bis es mal passt....

Vielen Dank und viele Grüße,

Dirk


----------



## Yaslaw (12. November 2009)

Nimm mal anstelle von m.group() -> m.group(1).
m.group(0) beinhaltet den ganzen gefunden String, m.group(1) die erste Klammer, m.group(2) die 2te Klammer etc.
(glaub ich indestens)

Zudem würde ich das Pattern ändern

```
=([^&]*?)&
```
Damit findest du bei "=test&nochwas&" -> "test"


----------



## DirkHo (12. November 2009)

Hi yaslaw,

vielen Dank! Ich kannte es zwar aus PHP, dass ich die gefundenen Resultate in einem Array habe und dann eben darüber die Klammern per Index ansprechen kann, in Eclipse wurde mir jedoch, als ich über den Methodennamen group() mit der Maus bin habe ich aber natürlich nur die 1.Zeile angeschaut und das "Parameters" unten ganz überlesen.

Nichts desto trotz wäre ich auf den RegEx, wie du ihn jetzt gepostet hast, nie selbst gekommen.

Vielen Dank nochmals und viele Grüße,

Dirk

PS: Dank des Forums ist mein Tag jetzt gerettet


----------



## DirkHo (13. November 2009)

Hi,

sorry, dass ich das Thema nochmals öffnen musste. Hat jemand vielleicht eine Idee, wie ich es in dem RegEx hinbekomme, dass nur der erste Treffer ausgegeben wird bzw. überhaupt gefunden wird (nehmen wir mal an, es gäbe 20 Mal die Kombination "=XYZ&", dann soll das erste XYZ ausgelesen und danach die suche abgebrochen werden)?

Vielen Dank und viele Grüße,

Dirk


----------



## deepthroat (13. November 2009)

Hi.

Warum verwendest du dann eine while-Schleife? ;-]

Gruß


----------



## DirkHo (13. November 2009)

Weil ich es bis dato nicht geschafft habe, nur den 1.Wert zu holen und beim 1.Post auch nicht daran dachte, dass ich ja nur den 1.Wert brauche.

-> den Code passe ich dann so weit an, wenn ich den passenden RegEx habe.

Viele Grüße und schönes WE,

Dirk


----------



## Volti (2. Dezember 2009)

Letztendlich kannst du ja auch den gefundenen String modifizieren. 


```
String str = m.group();
str = str.substring(1, str.length()-1);
```
oder  wenn ich mich nicht täusche 

```
String str = (input.substring(m.start()+1, m.end()-1));
```

Es hindert dich keiner daran statt einem while ein if zu verwenden, dann
wird nach dem ersten gefundenen Pattern abgebrochen.


----------

