3

OK、これが私がやろうとしていることです: PHP を使用して、完全なマークダウン クラスを使用する価値のない、本質的にマークダウン実装の小さなサブセットを開発しようとしています。

基本的に str_replace を実行する必要がありますが、HTML の開始タグと終了タグを処理するために、針が出現するたびに置換文字列を交互に使用します。

たとえば、イタリック体は *this* のようなアスタリスクのペアであり、コード ブロックは `this` のようなバッククォートで囲まれています。

文字のペアの最初の出現を対応する HTML の開始タグに置き換え、2 番目の文字のペアを終了タグに置き換える必要があります。

これを行う方法についてのアイデアはありますか?ある種の正規表現が関係すると思いました...

4

3 に答える 3

5

*個人的には、またはの各出現をカウンターでループし\、その文字をカウントに基づいて適切な HTML タグに置き換えます (たとえば、カウントが偶数でアスタリスクを押した<em>場合、それが奇数の場合は に置き換えます)。などに置き換えます</em>)。

しかし、いくつかの単純な種類のマークアップのみをサポートする必要があると確信している場合は、それぞれに正規表現を使用するのが最も簡単な解決策かもしれません。たとえば、アスタリスクの場合は次のようになります(テストされていません):

preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);

バックスラッシュについても同様です。

于 2009-07-02T04:37:47.860 に答える
4

あなたが探しているものは、ステートマシンまたはレクサー/パーサーによってより一般的に処理されます。

これは醜いですが、うまくいきます。キャッチ: 一度に 1 つのパターン タイプのみ。

$input = "Here's some \\italic\\ text and even \\some more\\ wheee";

$output = preg_replace_callback( "/\\\/", 'replacer', $input );

echo $output;

function replacer( $matches )
{
    static $toggle = 0;
    if ( $toggle )
    {
        $toggle = 0;
        return "</em>";
    }
    $toggle = 1;
    return "<em>";
}
于 2009-07-02T05:43:47.277 に答える