# RegEx und $-Zeichen als Literal



## Pfaeff (22. Jan 2010)

Hallo,

Ich versuche mittels einem regulären Ausdruck Worte in einem String zu finden, die mit einem Dollarzeichen beginnen.
Ich schaffe es Worte mit jedem beliebigen anderen Startzeichen zu finden, aber wenn ich das Dollarzeichen einsetze, erhalte ich keine Treffer mehr.

Das hier ist mein kleiner Test-Code:

```
String text = "blalblalbla $hallo blalblalgl ahallo bjklbkladjk";
		Pattern dollar = Pattern.compile("\\b\\$\\w*\\b");
		Matcher m = dollar.matcher(text);
		while (m.find()) {
			System.out.println(text.substring(m.start(), m.end()));
		}
```
Wenn ich "\\$" in diesem Beispiel durch "a" ersetzt, liefert er mir korrekterweise "ahallo". Mit dem Dollarzeichen liefert er aber nicht wie erwartet "$hallo", sondern findet einfach nichts. Ich hab schon viel rumprobieren, aber ich finde nicht heraus, woran es liegt.

Vielen Dank.


----------



## Atze (22. Jan 2010)

vielleicht hilft dir das

Issues with Dollar Signs ($) And Java's Matcher::AppendReplacement() Method


----------



## Pfaeff (22. Jan 2010)

Das habe ich mir auch schon angesehen und wie es scheint wird dort nur jedes $-Zeichen durch \$ ersetzt, was bei mir ja schon der Fall ist. Oder sehe ich das falsch?


----------



## SlaterB (23. Jan 2010)

das Problem ist hier das \\b, dessen Bedeutung ich gerade selbst mit der Anleitung und Ausprobieren gar nicht verstehe,
wofür soll das stehen?, für ein Leerzeichen kaum obwohl es mit ahallo klappt

nimm

```
Pattern dollar = Pattern.compile(" \\$\\w* ");
```
oder \\s für beliebige Whitespaces,

ah, vielleicht sollen die beiden \\b zusammen eine Wortgrenze bilden? tja, da spielt das Dollarzeichen wohl nicht mit, zählt nicht als Wort-Buchstabe


----------



## Pfaeff (23. Jan 2010)

Ja die \\b soll für eine Wortgrenze stehen. Mein eigentlicher Ausdruck ist etwas komplizierter, ich habe hier nur ein einfaches Beispiel gewählt. Ein Teil des Ausdruckes aus dem das Problem stammt sieht so aus:

```
"\\b((0x|\\$)[0-9a-fA-F]+)\\b"
```
Hiermit sollen Ausdrücke der Form:
0x2A4FB oder $0F42 in einem String gefunden werden (Hex-Zahlen). 
Allerdings ist es nicht erlaubt, dass sich diese in einem Wort befinden. Deshalb nutzt ich die Wortgrenzen bei denen ich leider nicht davon ausgehen kann, dass es sich um Leerzeichen handelt.
Möglich ist, dass nichts davor steht, ein Leerzeichen, ein Zeilenumbruch oder sogar ein Gleichheitszeichen.

Ich frage mich, warum das mit dem $ interferiert? \\$ soll ja schließlich wie ein Literal behandelt werden.


----------



## LoR (24. Jan 2010)

//EDIT 
	
	
	
	





```
Pattern dollar = Pattern.compile("(?<=\\s)(0x|\\$)[a-fA-F0-9]+);
```

Es gibt keine interferenzen zwischen \\b und \\$. Das Problem ist, dass \\$ nie zur Auswertung kommt da \\b ein $ am Anfang eines Wortes nicht aktzeptiert. Im eigentlichen Sinne ist "$hallo" auch kein Wort.

Gruß


----------

