Замена PHP, но альтернативная замена строки

Хорошо, вот что я пытаюсь сделать: я пытаюсь использовать PHP для разработки того, что по сути является крошечным подмножеством реализации уценки, не стоит использовать полный класс уценки.

Мне нужно по существу сделать str_replace, но чередуйте строку замены для каждого появления иглы, чтобы обрабатывать открывающие и закрывающие теги HTML.

Например, курсивом является пара звездочек типа * this *, а блоки кода окружены обратными тактами, как `this`.

Мне нужно заменить первое вхождение пары символов с открывающим HTML-тегом, а второе с закрывающим тегом.

Есть идеи, как это сделать? Я решил, что какое-то регулярное выражение будет задействовано …

Solutions Collecting From Web of "Замена PHP, но альтернативная замена строки"

Лично я прохожу через каждое вхождение * или \ с помощью счетчика и заменяю символ соответствующим тегом HTML на основе подсчета (например, если счет четный, и вы нажмете на звездочку, замените его на <em> , если он нечетный, замените его на </em> и т. д.).

Но если вы уверены, что вам нужно поддерживать только пару простых видов разметки, то регулярное выражение для каждого может быть самым простым решением. Что-то вроде этого для звездочек, например (непроверенных):

 preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text); 

И что-то похожее на обратную косую черту.

То, что вы ищете, чаще всего обрабатывается конечным автоматом или лексером / парсером.

Это уродливо, но оно работает. Catch: только для одного типа шаблона за раз.

 $input = "Here's some \\italic\\ text and even \\some more\\ wheee"; $output = preg_replace_callback( "/\\\/", 'replacer', $input ); echo $output; function replacer( $matches ) { static $toggle = 0; if ( $toggle ) { $toggle = 0; return "</em>"; } $toggle = 1; return "<em>"; }