Ich bin mir nicht sicher ob das die richtige Newsgroup ist, ich probiere
es dennoch.
Ich habe folgendes Problem:
Ich muss in einem bestimmten String verschiedene Zeichen durch Makros
ersetzen. Makros sehen so aus: $<name>$.
Leider muss auch das einfache Dollarzeichen durch ein Makro ($DOLLAR$)
ersetzt werden.
z.B.:
Ersetze ($) aber nicht $VARIABLE:a$ und $CONST$
soll zu:
Ersetze ($DOLLAR$) aber nicht $VARIABLE:a$ und $CONST$
werden.
Im Moment verwende ich folgendes Pattern:
/\$(?:(?!(VARIABLE|CONST.*\$)))/U
und erhalte:
Ersetze ($DOLLAR$) aber nicht $VARIABLE:a$DOLLAR$ und $CONST$DOLLAR$
Es sei erw�hnt, dass die meisten Makros Variablen halten k�nnen. In dem
Beispiel w�rde $VARIABLE$ den Parameter 'a' enthalten.
Das Problem w�re leicht gel�st, wenn es eine M�glichkeit g�be, dass nach
einem erfolgreichen look-ahead nach dem Treffer fortgesetzt wird.
Da sie ja auch Zero-Width Assertions genannt werden ist das leider nicht
der Fall.
Bin f�r alle Ratschl�ge dankbar,
mfg Philipp
> Ich habe folgendes Problem:
> Ich muss in einem bestimmten String verschiedene Zeichen durch Makros
> ersetzen. Makros sehen so aus: $<name>$.
> Leider muss auch das einfache Dollarzeichen durch ein Makro ($DOLLAR$)
> ersetzt werden.
>
> z.B.:
>
> Ersetze ($) aber nicht $VARIABLE:a$ und $CONST$
>
> soll zu:
>
> Ersetze ($DOLLAR$) aber nicht $VARIABLE:a$ und $CONST$
>
> werden.
>
> Im Moment verwende ich folgendes Pattern:
>
> /\$(?:(?!(VARIABLE|CONST.*\$)))/U
>
> und erhalte:
>
> Ersetze ($DOLLAR$) aber nicht $VARIABLE:a$DOLLAR$ und $CONST$DOLLAR$
Manchmal ist es logisch einfacher alles auf 2 oder mehr Aktionen
aufzuteilen.
Ich würde hier nicht so strikt versuchen alles mit einem Regex zu
erschlagen da das nicht ohne weiteres möglich ist.
Kleine Denkanregung:
$str = 'Ersetze ($) aber nicht $VARIABLE:a$ und $CONST$ a$';
$GLOBALS['tags'] = array();
$str = \preg_replace_callback(
'~\$[A-Za-z0-9_][A-Za-z0-9_:]*\$~', function ( $matches )
{
$tmp = '#{' . \count($GLOBALS['tags']) . '}';
$GLOBALS['tags'][$tmp] = $matches[0];
return $tmp;
}, $str );
echo \str_replace(
\array_keys($GLOBALS['tags']),
\array_values($GLOBALS['tags']),
\str_replace('$', '$DOLLAR$', $str));
MfG, Ulf