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

StackOverflow https://stackoverflow.com/questions/1072476

  •  21-08-2019
  •  | 
  •  

Вопрос

Хорошо, вот что я пытаюсь сделать:Я пытаюсь использовать 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>";
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top