RegEx-Frage: Ersetzen in UBB ausschließen

Daniel_L

Bekanntes Mitglied
Hallo, ich habe folgendes Problem mit RegEx, mal wieder. Ich möchte bestimmte Wörter (gespeichert in der Variable st, siehe unten) in einer HTML-Seite mit einem "Span"-Tag versehen, was wunderbar klappt. Das Ersetzen soll aber nur außerhalb von HTML-Tags durchgeführt werden. In Java sieht das so aus:

Java:
dummy = dummy.replaceAll("(?i)"+st+"(?![^<>]*>)", "<span "+cssclass+">$0</span>");

Nun möchte ich, dass diese Tags wahlweise in HTML-Seiten ersetzt werden (siehe oben), oder aber, wenn der "Quelltext" im UBB-Format vorliegt, das Ersetzen nicht innerhalb von UBB-Tags vorgenommen wird. Im Grunde müsste also das Erkennen von < und > durch [ und ] ersetzt werden. Aber: an welcher Stelle?

Ich hab folgendes probiert, in Abwandlung des Codes oben:
Java:
dummy = dummy.replaceAll("(?i)"+st+"(?![^\\[\\]]*>)", "<span "+cssclass+">$0</span>");

Klappt nicht mit UBB-Tags.

Mein gesamter Code sieht so aus:
Java:
if (!isUBB) {
  dummy = dummy.replaceAll("(?i)"+st+"(?![^<>]*>)", "<span "+cssclass+">$0</span>");
}
else {
  dummy = dummy.replaceAll("(?i)"+st+"(?![^\\[\\]]*>)", "<span "+cssclass+">$0</span>");
}

Das Ersetzen von Begriffen außerhalb von HTML-Tags funktioniert, das Ersetzen von Begriffen außerhalb von UBB-Tags funktioniert leider nicht, denn die Begriffe werden (mit dem obigen Code) auch innerhalb von UBB-Tags ersetzt.

Frage also: Wie lautet die RegEx-Formel für UBB-Tags, sprich das Ersetzen soll nicht innerhalb von [ und ] passieren?

Danke für eure Hilfe!
 
Zuletzt bearbeitet:
Also, laut dieser Seite: RegEx: online regular expression testing
müsste es klappen.

Eingaben RegEx: (?i)hallo(?![^\[\]]*\])
Java-String: (?i)hallo(?![^\\[\\]]*\\])
Replacement: <span>hallo</span>
Test-String: dies ist ein [img hallo] hallo test

ergibt: dies ist ein [img hallo] <span>hallo</span> test

Warum klappt es "in echt" (also in meinem Programm) nicht? Hm...
 
Ok, Denkfehler von mir. Die Angaben, die ich habe, sind nicht im img-UBB-Tags, sondern zwischen einem offenen und geschlossenem UBB-Tag. ^^

Lösung lautet (hoffentlich):

[Java]dummy = dummy.replaceAll("(?i)"+st+"(?![\\[img\\](.*?)\\[/img\\]])", "<span "+cssclass+">$0</span>");[/code]
 

Zurück
Oben