1

マークダウン文字列があるとします。

* 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.

...そして、あなたが上で言うことができるように、[コード]の中にあったものを保存してください。どうすればこれを達成できますか?

バックグラウンド

ほら、私はFluxBBフォーラムを微調整しようとしています。デフォルトでBBCodeを許可します。ただし、太字や斜体など、初心者向けのMarkdownの小さなサブセットも許可したかったのです。少なくとも太字の場合、これは次のようなステートメントで可能です。

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

...しかし、*testそれも翻訳したい部分に問題があります。

4

1 に答える 1

2

次のコードは機能しているようです。preg_replace_callback()andを使用して保持し、別のbin2hex()を介して unhex します。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 に答える