Probleme mit RegEx Folge 13: Backreference
a²
- php
0 Andreas Dölling0 MudGuard0 a²
Hallo zusammen,
mit der folgenden Funktion war ich letzte Woche schonmal hier hausieren, hatte damals allerdings ein anderes Problem.
Heute geht es um folgendes:
$theText = eregi_replace('(<font [^<]*color=["|']?([^ "']*)["|']?^></font>)','<fillcolor={ cmyk ' . getColorForPDF('\2', 'c') . ' ' . getColorForPDF('\2', 'm') . ' ' . getColorForPDF('\2', 'y') . ' ' . getColorForPDF('\2', 'k') . ' }\3<fillcolor={ ' . $sDefaultTextColor . ' }>', $theText);
An meine Funktion getColorForPDF() wird immer der Wert "2" übergeben statt der RegEx Backreference \2. Die Übergabe bzw. Auswertung von Reference \3 ist aber erfolgreich.
Was paßt bei der 2er nicht?
Danke vorab für Tipps und Grüße
Alex
Hallo,
hm, ich kann Dir da im Moment leider nicht weiterhelfen.
Allerdings scheint bei mir Dein Code zu funktionieren:
<?php
// Test
function getColorForPDF($color, $type) {
return 'XXX'.$color.'+'.$type.'XXX';
}
$theText = 'Dies ist ein <font face="Arial" color="#aa0000">toller</font> Test!';
$theText = eregi_replace('(<font [^<]*color=["|']?([^ "']*)["|']?^></font>)','<fillcolor={ cmyk ' . getColorForPDF('\2', 'c') . ' ' . getColorForPDF('\2', 'm') . ' ' . getColorForPDF('\2', 'y') . ' ' . getColorForPDF('\2', 'k') . ' }\3<fillcolor={ ' . $sDefaultTextColor . ' }>', $theText);
echo htmlentities($theText);
?>
Gibt folgendes aus:
Dies ist ein <fillcolor={ cmyk XXX#aa0000+cXXX XXX#aa0000+mXXX XXX#aa0000+yXXX XXX#aa0000+kXXX }>toller<fillcolor={ }> Test!
Was ja korrekt ist.
Ciao,
Andreas
Hi,
. getColorForPDF('\2', 'c')
Kann es sein, daß da ein \ zuviel ist?
Innerhalb von single quotes wird \ doch nicht als Sonderzeichen behandelt, wenn ich mich richtig erinnere.
cu,
Andreas
. getColorForPDF('\2', 'c')
Kann es sein, daß da ein \ zuviel ist?
Hallo Andreas,
ich habs auch mit einfachen Backslashes versucht; es wird trotzdem die Zahl zwei übergeben statt der Backreference. :-(