[RegEx] Suchen/Ersetzen, dabei Teile ignor.

 


Toni
Veteran

27.02.09
07:59 Uhr
Vorweg: Ich möchte eine Petition starten, und zwar benötige ich hier mein eigenes RegEx-Board, weil ich's glaube ich nie verstehen werden ^^party

Worum es geht:
Mit folgender Zeile (habe ich immer selbst rausgefunden, juchu!) kann ich Suchen/Ersetzen, optional case-senstivie und Suche nach ganzen Wörtern (in Java):
  1. text.replaceAll("(?i)\\bSuchbegriff\\b", "Ersetzt durch")); // no matchcase, but whole word.
Quelltext in Zwischenablage kopieren

Klappt wunderbar. Aber was ist, wenn ein Wort durch Tags auseinandergerissen wurde?

Ich würde bspw. den Suchbegriff Spotleid durch Supertopic ersetzen. Nun ist im Text das Wort Spotleid aber durch Tags nicht mehr als ganzes Wort vorhanden, sondern bspw. so: Spot<i>leid</i>.

Kann man das irgendwie hinkriegen, dass solche Tags (bzw. in meinem Fall UBB-Tags mit [ und ]) bei der Suche ignoriert, und beim Ersetzen dann überschrieben werden? Dass also aus Spot<i>leid</i> ein Supertopic wird?
Link zu diesem Beitrag in die Zwischenablage kopieren
caZpa
Veteran

27.02.09
09:00 Uhr
  1. text = text.replaceAll("\\<.*?\\>", "");
  2. text = text.replaceAll("\\[.*?\\]", "");
  3.  
  4. //hier deine Zeile...
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
Toni
Veteran

27.02.09
09:07 Uhr
Das geht leider nicht, denn ich möchte nur dort die Tags entfernen, wo der Suchbegriff auftaucht. Alle anderen Wörter, die auch mit Tags formatiert sein könnten und nicht ersetzt werden, sollen ihre Tags behalten... das ist das komplizierte daran. hm.
Link zu diesem Beitrag in die Zwischenablage kopieren
caZpa
Veteran

27.02.09
10:01 Uhr
Speichere den ursprünglichen String und ersetze alle Tags in einem neuen String.
Dann ersetze die Wörter, und splitte beide Strings Wort für Wort (durch Leerzeichen) in
ein Array. Durchlaufe das erste Array (mit den Tags) in einer Schleife, wobei du mit dem
aktuellen Key das andere Array auf deinen Begriff abfragst und bei Übereinstimmung
den Wert des ersten Arrays überschreibst. Verständlich?
Link zu diesem Beitrag in die Zwischenablage kopieren
Toni
Veteran

27.02.09
10:07 Uhr
Ja, war verständlich. Hatte nur gehofft, das reguläre Ausdrücke sowas wie absolute Alleskönner sind und es ohne diesen Umweg gehen würde. ;-)
Link zu diesem Beitrag in die Zwischenablage kopieren
caZpa
Veteran

27.02.09
10:25 Uhr
prinzipiell geht das schon. Dafür musst du hinter jedem Buchstaben deines Suchbegriffes auf ein Tag abfragen, ungefähr so:
  1. text.replaceAll("(?i)\\bS(<.*?\\>|[.*?\\])u(<.*?\\>|[.*?\\])c(<.*?\\>|[.*?\\])h(<.*?\\>|[.*?\\])b(<.*?\\>|[.*?\\])e(<.*?\\>|[.*?\\])g(<.*?\\>|[.*?\\])r(<.*?\\>|[.*?\\])i(<.*?\\>|[.*?\\])f(<.*?\\>|[.*?\\])f(<.*?\\>|[.*?\\])\\b", "Ersetzt durch"));
Quelltext in Zwischenablage kopieren
Ob das jetzt so 100% richtig ist weiß ich nicht. Für große RegExe arbeite ich gerne mit dem RegEx Coach (). Damit kann man ganz gut rumprobieren.
Link zu diesem Beitrag in die Zwischenablage kopieren
espy
Veteran

27.02.09
10:30 Uhr
Hier ist noch ein schönes Onlinetool für Actionscript Regexe: http://gskinner.com/RegExr/
Link zu diesem Beitrag in die Zwischenablage kopieren
Toni
Veteran

27.02.09
14:34 Uhr
Irrelevanter Beitrag (anzeigen):

Link zu diesem Beitrag in die Zwischenablage kopieren
 
#