PHP更换,但备用替换字符串(PHP Replace, But Alternate Replace

2019-09-17 11:13发布

好了,这就是我想要做的事:我试图使用PHP开发什么本质上是一个降价实施的一集,不值得用一个完整的降价类。

我基本上需要做str_replace函数,但是对于交替针的每次出现替换字符串,这样才能处理的开启和关闭的HTML标签。

例如,斜体字是在一对像*此*星号,和代码块由相同的`this`反引号包围。

我需要更换一对与开口HTML标签对应的字符的第一次出现,并与结束标记的第二个。

如何做到这一点任何想法? 我想通了某种正则表达式将参与...

Answer 1:

就个人而言,我会遍历每次出现*\用计数器,并取代基于计数与相应的HTML标记的字符(例如,如果计数,甚至和你打一个星号,将其替换为<em> ,如果是奇数然后将其替换为</em>等)。

但是,如果你确定,你只需要支持几个简单的各种标记,然后为每个正则表达式可能是最简单的解决方案。 像这样的事情了星号,例如(未经测试):

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

而对于反斜线类似的东西。



Answer 2:

你正在寻找更普遍由状态机或词法/语法分析器处理。

这是丑陋的,但它的工作原理。 抓住:仅一次一个模式类型。

$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>";
}


文章来源: PHP Replace, But Alternate Replace String