Prob. mit reg. Ausdruck

chickenwings

Erfahrenes Mitglied
Hallo,

habe folgendes Problem:
Code:
String str = "</sjjhdsj>sdkhk<rgkhkj><MSK fkkhkj 'Telefon' fsdf><dfsdf>";
 
Pattern pattern = Pattern.compile("<(.*)(Telefon)(.*)>", Pattern.DOTALL);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.replaceAll("FOO"));

das habe ich von einen hiesigen Beispiel.
Leider wird der komplette String ersetzt und nicht nur der Teil in dem "Telefon" enthalten ist.
Was mache ich falsch?

chickenwings
 
Den ganzen Tag? Oder nur das Wort "Telefon" innerhalb des Tags?

Um den ganzen Tag zu ersetzen, in dem Telefon vorkommt, benutz diesen String als Pattern:

Java:
"<([^'><]*')(Telefon)('[^>]*)>"

Oer vereinfacht, da du die Gruppen nicht brauchst, weil du kein Backreferecing durchführst:

Java:
"<[^'><]*'Telefon'[^>]*>"
 
Zuletzt bearbeitet:
Hi,

danke für Deine Antwort. Für dieses spezielle Beispiel funktioniert es.
Aber allgemein dachte ich der Punkt steht für ein beliebiges Zeichen

Ich denke ich verstehe aber Deinen Ansatz: So erlaubt dieser Ausdruck alle Zeichen ausser '<> und das in beliebiger Reihenfolge und Anzahl dann kommt der eigentliche Suchstring usw.

Danke
chickenwings
 
Richtig.

Das Problem mit dem . ist, dass er auch Telefon matched, d.h. er fängt am Anfang an, sieht das < und nimmt dazwischen alle Zeichen bis Telefon. Daselbe hinter Telefon, er geht bis zum letzten >.

Um das zu verhindern sagst du ihm, dass er eben nicht alle Zeichen beachten soll, sondern dass zwischen öffnendem < und Telefon keine weiteren Tags mehr vorkommen dürfen. Gleiches gitl für das Ende des Tags.
 
Zurück