a²: Probleme mit RegEx Folge 13: Backreference

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

  1. 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

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
  2. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. . 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. :-(