RegEx - replaceAll()

Hi.

Ich habe noch nicht allzu viel erfahrung mit RegEx und daher eine Frage:

Ich habe einen Text, den ich von einem Thread zu einem anderen schicke. Das ganze über einen char-Array. Ist der Text also zu klein für die Elementanzahl, kommen dort noch unlesbare Zeichen hinzu.
Der Text könnte bspw. aus einem Chat stammen und dann folgendermaßen aussehen:

Morgyr: hi

Jetzt will ich die unnötigen Zeichen vom char-Array herausfiltern und wollte das einfach über die replaceAll()-Methode von String machen. Nur wie sieht der Ausdruck für „ersetze alle Zeichen bis auf alle Buchstaben des Alphabets, alle Zahlen, alle Doppelpunkte und alle Leerzeichen“ aus?

Als Ansatz hatte ich einfach

\W\S^\:
Nur ist dabei der Effekt, dass jedes Zeichen ersetzt wird. Mit einem „|“ zwischen den einzelnen Bedingungen, klappts auch nicht.

Gibts es eine andere Möglichkeit, als jedes Zeichen manuell auf die Bedingungen zu überprüfen, und dann mit replace() einfach auszutauschen?

Mit freundlichen Grüßen
Morgyr

System.err.println(str.replaceAll("[^A-z0-9 :]", ""));
System.err.println(str);```

sowas?

Kannst dir auch mal das hier durchlesen: http://www.java-blog-buch.de/0307-regulare-ausdrucke/

Ja, genau so funktionierts.
Dann hatte ich wohl die ganze Zeit über diese Verneinung ^ falsch gesetzt gehabt. Immer diese kleinen Zeichen, mit ihren großen Auswirkungen^^

Den Artikel werd ich mir später mal anschauen.

Danke für die Hilfe :wink:

Das ^ ist aber keine Verneinnung sondern sagt aus das der folgende Ausdruck am Anfang des zu durchsuchenden Strings stehen muss.

Gut Schuß
VuuRWerK :wink:

[QUOTE=VuuRWerK]Das ^ ist aber keine Verneinnung sondern sagt aus das der folgende Ausdruck am Anfang des zu durchsuchenden Strings stehen muss.

Gut Schuß
VuuRWerK ;)[/QUOTE]

Bitte was? Ich glaub ich check grad nicht, was du meinst …

In regulären Ausrücken hat das Metazeichen ‚^‘ nicht die Bedeutung der Verneinung wie von Morgyr vermutet sondern es bedeutet das der nachfolgende Ausdruck am Anfang der zu durch-suchenden Zeichenkette sich befinden sollte um als Treffer anerkannt zu werden, so besser? :slight_smile:
Es sei denn in Java hat das Metazeichen ‚^‘ eine andere Bedeutung dann nehme ich alles zurück und behaupte das Gegenteil, jedoch ist mir auch in Java noch kein anderes Verhalten untergekommen :slight_smile:

Gut Schuß
VuuRWerK :wink:

Also eigentlich sollten reguläre Ausdrücke überall gleich sein und eigentlich bedeutet ein ^ = “alles außer”. Oder reden wir gerade aneinander vorbei? Siehe auch http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html

Ach halt! ^^ (<- ach schau da … :D)

Ich gebe die Hälfte des Fehlers zu das ich was übersehen habe :slight_smile:
^ innerhalb einer „Characterclass“ (bsp: „[^abc]“) bedeutet es nicht, steht dieses jedoch am Anfang eines Regulären Ausdrucks (bsp: „^muss am Anfang stehen.*“) dann bedeutet es der reguläre Ausdruck trifft nur zu wenn dieser am Anfang des zu durch-suchenden Strings steht.

So, damit hätten wir auch das :slight_smile:

Gut Schuß
VuuRWerK :wink:

jop, da geb ich dir recht :slight_smile: