RegEx for Markdown to BBCode(Simplistic)

时间:2012-06-20 07:19:10

标签: regex markdown bbcode

假设我有一个Markdown字符串:

* Bullet has *bold [code]*test[/code] part*. *Another\nbold* item.

我想将它转换为BBCode,如:

* Bullet has [b]bold [code]*test[/code] part[/b]. [b]Another\nbold[/b] item.

...而且,正如您上面所说,保留[code]中的内容。我该如何做到这一点?

背景

看,我正在尝试调整FluxBB论坛。它默认允许BBCode。但是,我还想允许一小部分Markdown用于新手,例如粗体和斜体。至少对于粗体来说,这可以通过如下声明来实现:

$out = preg_replace('/\*(\S.*?\S)\*/s','[b]$1[/b]',$in);

...但是*test部分存在问题,它也想要翻译它。

1 个答案:

答案 0 :(得分:2)

以下代码似乎有效。我使用preg_replace_callback()bin2hex()保留,然后通过pack()通过另一个preg_replace_callback()取消保留。

$a = "* Bullet\n* Bullet has *bold [code]*test[/code] part*. *Another\nbold* item.";
echo $a;
echo "\n";
// PRESERVE CODE BLOCK
$a = preg_replace_callback('/\[code\](.*?)\[\/code\]/s',create_function('$a','return "[code]" . bin2hex($a[1]) . "[/code]";'),$a);
// HANDLE MARKDOWN FOR BOLD
$a = preg_replace('/\*(\S.*?\S)\*/s','[b]$1[/b]',$a);
// RESTORE CODE BLOCK
$a = preg_replace_callback('/\[code\](.*?)\[\/code\]/s',create_function('$a','return "[code]" . pack("H*",$a[1]) . "[/code]";'),$a);
echo $a;
echo "\n";