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?
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^^
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?
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
Ich gebe die Hälfte des Fehlers zu das ich was übersehen habe
^ 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.