PHP Заменяет, Но Альтернативная Строка Замены
Хорошо, вот что я пытаюсь сделать: я пытаюсь использовать PHP для разработки того, что по сути является крошечным подмножеством реализации markdown, не стоит использовать полный класс markdown.
По сути, мне нужно выполнить str_replace, но чередовать строку замены для каждого вхождения иглы, чтобы обрабатывать открывающие и закрывающие HTML-теги.
Например, курсив - это пара звездочек, таких как *это*, а блоки кода окружены обратными знаками, такими как `это`.
Мне нужно заменить первое вхождение пары символов соответствующим открывающим тегом HTML, а второе - закрывающим тегом.
Есть идеи, как это сделать? Я полагал, что будет задействовано какое-то регулярное выражение...
2 answers
Лично я бы перебирал каждое вхождение *
или \
с помощью счетчика и заменял символ соответствующим тегом 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>";
}