Java-RegEx-Problem
-
Schreibe mir gerade eine kleine Template-Klasse für den Gebrauch in Servlets. Nun bin ich gerade bei der Implementierung einer Funktion applySingleBincolor(), die Folgendes leisten soll:
Im Template steht irgendwo:
[bincolor name="irgendeinname" valtrue="green" valfalse="red"]Ein Text[/bincolor]Und wenn applySingleBinColor mit dem Namen, der in name="..." angegeben ist aufgerufen wird, so soll folgendermaßen ersetzt werden:
<font color="das was bei valtrue steht">Ein Text</font>
Ich habe dazu folgenden Code geschrieben:
public void replace(String needle, String replacement) { Pattern p = Pattern.compile(needle); this.content = p.matcher(this.content).replaceAll(replacement); } public void applySingleBincolor(String bincolor) { this.replace("\[bincolor name=\"" + bincolor + "\" valtrue=\"([A-Za-z0-9_-]*)\" valfalse=\"([A-Za-z0-9_-]*)\"\]([^\[]*)\[\\/bincolor\]", "<font color=\"$1\">$3</font>"); }
Irgendwie matcht der Ausdruck aber nicht und es wird nicht ersetzt. Kann mir jemand weiterhelfen?
-
Bist du dir sicher, dass das allererste Backslash in deiner RegEx richtig ist? Meines Erachtens sollte dort nur eins sein, wenn du die Klammer escapen willst...
-
Dasd schrieb:
Bist du dir sicher, dass das allererste Backslash in deiner RegEx richtig ist? Meines Erachtens sollte dort nur eins sein, wenn du die Klammer escapen willst...
Zwei sind schon richtig. Der String wird ja erst an den RegEx-verarbeitenden Teil weitergegeben. [ wäre eine nicht erkannte Escape-Sequenz und der String wäre Fehlerhaft. Erst "\" wird in \ umgewandelt, was der RegEx-verarbeitende Teil dann als RegEx-Escape-Sequenz zusammen mit der Klammer erkennt: [
-
Hast recht.
Aber: Muss der "/" wirklich escaped werden? Meines Erachtens würde deine RegEx jetzt nach einem "... [\/bincolor]" suchen.
-
Dasd schrieb:
Hast recht.
Aber: Muss der "/" wirklich escaped werden? Meines Erachtens würde deine RegEx jetzt nach einem "... [\/bincolor]" suchen.
Ich habe mir schon einen anderen RegEx-Ausdruck geschrieben und da habe ich ihn auch escaped. Ich kann trotzdem mal ohne escapen versuchen das Zeug zum laufen zu kriegen.
P.S.: Irgendwie hält sich das Java-RegEx-Zeugs nicht ganz an ERE...
-
Die RegEx ist ok... Lag an was anderem... *andenkopfschlag*
-
hackbert schrieb:
Die RegEx ist ok... Lag an was anderem... *andenkopfschlag*
Da verfolgt man den Thread um zu sehen was denn tatsächlich an der RegEx falsch ist und dann das
MfG SideWinder