Innerhalb von Pattern Matching ersetzen

Arne Buchwald

Erfahrenes Mitglied
Hallo,

im Moment habe ich wieder mal ein Pattern Matching-Problem vor mir.

Und zwar lasse ich die ganzen BB-Codes eines Strings wie folgt
Code:
  Pattern := '\[color=(.*?)\](.*?)\[\/color\]';
  OutputStr := Replace(InputStr, '<font color=$1>$2</font>');
ersetzen.

Mein Problem ist, dass innerhalb des Wertes $2 zusätzlich HTML-Tags geparst werden müssen (sprich in &lt; und &gt;).

Hat da jemand eine Idee ?
 
PHP:
$2 = htmlentities($2);

Vorrausetzung ist natürlich, dass die Variable 2 existiert (müsste abba sein).
Allerdings ist eine reine 2 als Variablennamen ungültig!

<edit>Der Code aus deinem Code ist abba kein PHP, oder? :rolleyes: </edit>
 
Zuletzt bearbeitet von einem Moderator:
Hi,

sorry, habe mich wohl nicht preziese genug ausgedrückt.

Code:
Pattern := '\[color=(.*?)\](.*?)\[\/color\]';
  OutputStr := Replace(InputStr, '<font color=$1>$2</font>');
Die $1 und $2 sind keine Variablennamen, da wär's ja simpel.
Nein, $1 beinhaltet den Wert des ersten (.*?) und $2 den Wer des zweiten (.*?). Im Variablensinne existieren $1 und $2 allerdings nicht.

Ich vermute mal, dass ich den Pattern Matching-Ausdruck irgendwie verändern muss, so dass dieser bereits HTML-Tags parst. :confused:

<edit>Der Code aus deinem Code ist abba kein PHP, oder? :rolleyes: </edit>
Nee *g*, aber ein Pattern Matching-Problem, was IMO in PHP ja stark vertreten ist. :)
 
Seltsam

in meinem PCRE Tester funktioniert das
ganze einwandfrei. Und mein Code sieht
nicht anders aus .. höchst seltsam.

Code:
#\[color=(.*?)\](.*?)\[/color\]#

jona
 
Re: Seltsam

Hi,

Jonathan hat gesagt.:
in meinem PCRE Tester funktioniert das
ganze einwandfrei. Und mein Code sieht
nicht anders aus .. höchst seltsam.

Code:
#\[color=(.*?)\](.*?)\[/color\]#


jona
Irgendwie kann ich damit jetzt gar nichts anfangen oder ich verstehe es nur nicht ... :)
Der Pattern Matching-Ausdruck als solches funktioniert ja auch wunderbar, nur möchte ich, dass der Bereich, der innerhalb von [ color ] und [ /color ] steht, auf HTML-Tags geparst wird ...
 
Hm, also dein Problem lässt sich AFAIK nicht durch ein bloßes Anpassen des regulären Ausdrucks lösen.

Bei PHP würde ich mir hier von preg_match_all ein Array mit den Matches erstellen lassen und das Ersetzen dann "per Hand" mit str_replace o.ä. durchführen. Dann kann ich den Ersatzstring davor ja modifizieren wie ich will.

Ob das in Delphi (?) möglich ist, musst du aber selber wissen ;)
 
Hi,

wäre nur schön zu wissen welche Sprache du benutzt dann kann ich mir das auchmal anschauen ..
Ist in Delphi.

Original geschrieben von reima
Ob das in Delphi (?) möglich ist, musst du aber selber wissen ;)
Die Pattern-Matching-Implementierung in Delphi ist ziemlich dürftig. D.h. von Haus aus ist RegExpr nicht möglich.

Aber danke noch mal, ich werde mich gleich noch mal ransetzen und melde mich dann wieder.

Vielen Dank euch allen. :)
 
Zurück