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