Замена PHP, но альтернативная замена строки
Вопрос
Хорошо, вот что я пытаюсь сделать:Я пытаюсь использовать PHP для разработки того, что по сути является крошечный подмножество реализации уценки, не стоит использовать полный класс уценки.
По сути, мне нужно выполнить str_replace, но чередовать строку замены для каждого появления иглы, чтобы обрабатывать открывающие и закрывающие HTML-теги.
Например, курсив представляет собой пару звездочек, например *this*, а блоки кода окружены обратными кавычками, например `this`.
Мне нужно заменить первое вхождение пары символов соответствующим открывающим тегом HTML, а второе - закрывающим тегом.
Есть идеи, как это сделать?Я подумал, что здесь будет задействовано какое-то регулярное выражение...
Решение
Лично я бы просматривал каждое появление *
или \
счетчиком и замените символ соответствующим HTML-тегом на основе счетчика (например, если счетчик четный и вы нажали звездочку, замените его на <em>
, если это странно, замените его на </em>
, и т. д).
Но если вы уверены, что вам нужно поддерживать только пару простых видов разметки, то самым простым решением может быть использование регулярного выражения для каждого из них.Например, для звездочек что-то вроде этого (непроверено):
preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);
И что-то подобное для обратной косой черты.
Другие советы
То, что вы ищете, чаще всего обрабатывается конечным автоматом или лексером/парсером.
Это некрасиво, но это работает.Ловить:только для одного типа шаблона одновременно.
$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>";
}