自定义“Markdown”式标签

时间:2014-01-06 06:55:24

标签: php regex markdown

我想为不同的东西创建自定义标签,例如粗体,下划线和斜体,而不使用Markdown库/类。

例如

*Bold text*
/Italic text/
_Underlined text_

所以上面的内容将改为:

<strong>Bold text</strong>
<em>Italic text</em>
<u>Underlined text</u>

我不知道从哪里开始,并且一直在寻找解决方案。

我阅读了一些关于正则表达式的教程,但仍然不确定如何处理它。

先谢谢。

1 个答案:

答案 0 :(得分:3)

这是使用正则表达式执行此操作的递归函数。棘手的部分(对我来说)是使用正斜杠/,它也用在close标签中。所以首先我插入{}并在最后替换/

测试文字:

$input ="
*Bold text*
bla bla bla
/Italic text/
bla bla bla
_Underlined text_
bla bla bla
";

替换功能:

function markdown(&$text, $code, $tag, $open) {
    if (strpos($text, $code)) {
        $insertTag=($open) ? '<'.$tag.'>' : '<{}'.$tag.'>';
        $reg='['.preg_quote($code).']';
        $text=preg_replace($reg, $insertTag, $text, 1);
        markdown($text, $code, $tag, !$open);
    } else {
        return;
    }
}

运行:

markdown($input, '*', 'strong', true);
markdown($input, '/', 'em', true);
markdown($input, '_', 'u', true);
$input=str_replace('{}', '/', $input);
echo $input;

输出:

<strong>Bold text</strong>
bla bla bla
<em>Italic text</em>
bla bla bla
<u>Underlined text</u>
bla bla bla