我想为不同的东西创建自定义标签,例如粗体,下划线和斜体,而不使用Markdown库/类。
例如
*Bold text*
/Italic text/
_Underlined text_
所以上面的内容将改为:
<strong>Bold text</strong>
<em>Italic text</em>
<u>Underlined text</u>
我不知道从哪里开始,并且一直在寻找解决方案。
我阅读了一些关于正则表达式的教程,但仍然不确定如何处理它。
先谢谢。
答案 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