# Reguläre ausdrücke mit variablen?



## BigDaddy (10. Jun 2007)

Hi,

ich hab mit zwar gerade die Klassen für Reguläre Audrücke angeschaut konnte aber nicht passendes finden.

Ich suche eine Möglichkeit einen String anhand einem regulären ausdruck zu überprüfen, um ebenfalls gleichzeitig dann variablen zu füllen (teile von einem String).

Beispiel:

String: "Das kostet 44 Euro"

regular expression "^Das\\skostet\\s[0-9]+(Euro|Dollar)" (oder so ähnlich)

So jetzt kann ich zwar ünerprüfen ob das stummt, wiill aber die 44 euro in einer variable haben? Wir wäre das zu lösen?
 Würde mich über eine Antwort freuen.. 

Ciao


----------



## Wildcard (10. Jun 2007)

Mit () werden Capturing Groups definiert auf die man mit matcher.group(int) zugreifen kann.


----------



## SlaterB (10. Jun 2007)

und da ich es eh schon geschrieben habe:

public class TestKonsole {

	public static void main(String agrs[]) {
		String st = "Das kostet 44 Euro";
		Pattern p = Pattern.compile("^Das\\skostet\\s([0-9]+)\\s(Euro|Dollar)");

		Matcher m = p.matcher(st);
		if (m.matches()) {
			System.out.println(m.group(1));
		}
	}
}


----------



## Gast (10. Jun 2007)

Perfekt, besten Dank an beide!!


----------



## BigDaddy (10. Jun 2007)

Hi, klappt alles soweit wunderbar. NUr.... das dauert zeitlich seeehr lange?
Ich kompiliere zu begin alle regulären ausdrücke und frage sie dann während des programms pro sekunde ab. Es sind insgesamt 10 reguläre ausdrück, die zu überprüfen sind. Ich brauche aktuell für 10 ca. 5 sek????

Dies wird für jede sec für 10 expression ausgeführt (dauert 5sec)

```
if( (m = ((Pattern )regCompiled.get(0)).matcher(event_msg)).matches() ) 
{
}
```


kann ich das irgendwie geschlenigen?


----------



## Wildcard (10. Jun 2007)

Machst du irgendwelche String + String Operationen?


----------



## BigDaddy (10. Jun 2007)

Was und Wo meinst du das? Generell nicht nein. aber das dürfte sich doch nicht dermaßen auswirken?


----------



## Wildcard (10. Jun 2007)

Sogar definitiv.
Ohne mehr Code kann ich nicht mehr dazu sagen.


----------



## BigDaddy (10. Jun 2007)

Ok, es war mein Fehler, klappt alles


----------



## BigDaddy (10. Jun 2007)

Danke


----------



## BigDaddy (11. Jun 2007)

So ich bin es nochmal. ICh hab noch einen kleinen Denkfehler:

Ich will zb. in folgemdem Script:

```
String st = "Das ist ein test";
    	 Pattern p = Pattern.compile("Das");

    	 Matcher m = p.matcher(st);
    	 if (m.matches()) {
    	 	System.out.println(m.group(1));
    	 }
```

oder mit "^Das" klappt es auch nicht?


----------



## kleiner_held (11. Jun 2007)

1. nimm m.find() und nicht m.matches(), matches bedeutet, dass der komplette String auf den Pattern passen muss
2.a der Pattern muss entweder so aussehen: Pattern.compile("(Das)"); - die Klammern sorgen in dem Fall dafuer, dass group(1) der Zeichenkette _Das_ entspricht
2.b oder du kannst den Pattern so lassen wie er ist und nimmst m.group(0)


----------



## SlaterB (11. Jun 2007)

if (m.find()) {


----------

