1

假设我有一个 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,它也想翻译它。

4

1 回答 1

2

以下代码似乎有效。我保留使用preg_replace_callback()and 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";
于 2012-06-20T08:02:35.710 回答