用于将由四个空格缩进的文本块转换为<pre><code> block [Markdown]</code></pre>的PHP代码

时间:2010-03-31 07:15:35

标签: php markdown

我不擅长PHP,并希望有一个PHP函数来转换它(文本块缩进四个空格):

    printf("goodbye world!");  /* his suicide note
                                  was in C */

进入这个:

<pre><code>    printf("goodbye world!");  /* his suicide note
                              was in C */</code></pre>

保持所有其他线路完整。

这就是Markdown所做的。我找到this PHP port of Markdown(请参阅function doCodeBlocks()),但我不想使用整个Markdown文件,我只想要这个功能。

有人能为我提供使其运行所需的最少PHP代码吗?所以我可以这样做:

<?php echo markdownPre('Here goes some code:

    var x = 1, y = 2;
    alert(x + y);

That should be a pre block.'); ?>

3 个答案:

答案 0 :(得分:3)

我没试过,但我认为你可以preg_replace正则表达式

/((?:^(?: {4}|\t).*$\n+)+)/m

<pre><code>$1</code></pre>

答案 1 :(得分:2)

虽然Kenny的表达有效,但我建议用回调代替灵活性:

function markdownPre($in) {
    if(is_array($in)) {
        $code = $in[0];
        // post-process the code, e.g. remove leading spaces
        $code = preg_replace('~^(\x20{4}|\t)~m', '', $code);
        return "<pre>$code</pre>";
    }

    return preg_replace_callback('~(
        ^
        (\x20{4} | \t)
        (.+)
        \n
    )+~mx', __FUNCTION__, $in);
}

在“后处理”阶段,您可以做有趣的事情,例如语法高亮。

答案 2 :(得分:-1)

我不能正确理解这个问题。你想要像 -

这样的东西吗?

function markdownPre($ str){     返回'&lt;预&GT;&LT;代码&GT;”。$海峡 ''; }

这将返回

<pre><code>    printf("goodbye world!");  /* his suicide note
                              was in C */</code></pre>

如果你通过

echo markdownPre('printf(“再见世界!”); / *他的遗书                                   是在C * /')

到它。