я определил формат журнала строку, как это:PHP Regex с условиями
[% Время%]% Logger%% Уровень.%:% Сообщение% $ {$% Context% $} $ $ \ п $% Extra% \ п
Дополнительно к замене% -Keys я хочу, чтобы иметь возможность определить условия, как вблизи% Context% -Key:
Так что если% Context% пуст, пропустите полный $ {$ % Контекст% $} $ Если% Контекст% не пуст, также печатайте префикс {и суффикс}
Я пробовал это (я планировал перепланировать се ключи внутри цикла):
$output = '';
$subject = '[%Time%] %Logger%.%Level%: %Message% ${$%Context%$}$ $\n$%Extra%\n';
$output .= preg_replace('/(\$(.*|^\$)\$)?%Context%(\$(.*|^\$)\$)?/', '\2test\4', $subject);
Что я ожидаю (Context пусто):
[%Time%] %Logger%.%Level%: %Message% $\n$%Extra%\n
Что я ожидаю (контекст не пуст):
[%Time%] %Logger%.%Level%: %Message% {test} $\n$%Extra%\n
Что я получаю (Контекст не пуст):
[%Time%] %Logger%.%Level%: %Message% {test}$ $\n%Extra%\n
И я не знаю, где t он последний доллар.
Я попробовал это в обоих [jsFiddle] (HTTP://jsfiddle.net/8uN9y/) и в php, и оба раза он возвращался без $ ... и без фигурных скобок в jsFiddle (но это менее актуально, я подозреваю). Мой php-выход из вашего кода: '[% Time%]% Logger%.% Level%:% Message% {test}% Extra% \ n' – Ross
Я получаю тот же результат, что и Росс [Regex101] (http: //regex101.com/r/tB3eQ7) ... 'If% Context% не пуст, также печатайте префикс {и суффикс}' => не могли бы вы вывести ожидаемый результат в этом случае ... – Enissay
Это очень странно, я пробовал с PHP 5.2 и 5.4. Я отредактировал сообщение выше –