0

さて、私は自分のフォーラムで bbcode スタイルのタグの一連の文字列置換に取り組んできました。置換[b]など[i]は、問題なく直接置換できるため、かなり簡単です。

問題を引き起こしているタグが 2 つあります。これらのタグを使用する必要があるのは、より複雑なためです。[quote][url]は問題ありませんが、ユーザーが と を選択できるようにしたいと思います[quote=person_to_quote][url=URL]link text[/url]タグ[quote=]もネストできる必要があります。

[quote=したがって、開始タグを置き換えてから、文字列を保持し]、引用符を表示してから終了できるようにする必要があり[/quote]ます。タグを大規模に置き換えて=person罰金を保持することはできますが、それは私が不正行為を行い、テキストに終了タグを追加するだけです. 私が本当にやりたいことは、 の間にすべてを引っ張って=保管]し、それを個別に操作できるようにすることです。

現在、私は配列を使用しており、インラインテキストを次のように単純に置き換えています。

    "[quote=" is replaced by "<span class=\"quote\">[Quote: ",

置換されていないテキストを最後に叩きつけるだけですが、それは醜いです。私ができるようにしたいのは、コードを言って、それを次の[quote=person]some text here[/quote]ように変えることです:

    "[quote=" is replaced by "<span class=\"quote\">$person says: ",

ここで、$person は人の名前を格納する変数であり、動的に置き換えることができます。

同様に、置換したい URL と同様に、URL を[url=link]link text[/url]受け入れてインラインで置換できるようにするため、出力は次のようになります。

"[url=" is replaced by "<a href=$URL>"

html では、タグは既に閉じられています。つまり、URL を取り除き、保存してから置き換えます。

=では、 と終了タグの間のテキストを削除するためにどのような方法を使用]すればよいでしょうか。それにより、replace 配列に渡したものを渡して、それに応じて変更することができます。また、スパンクラスのスタイリングがそれを処理するので、ネストについては心配していませquotesんが、任意の数の引用タグを処理できる関数が必要です!.考えてください.

編集:

ただの更新です。やりたかったことを解決しました。webbiedave から提供されたコードを変更しましたが、動作します。

$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);

とにかく、その後、通常のタグ置換検索で終了タグが取得されます。

4

1 に答える 1

2

preg_replace_callbackを試してください:

$output = preg_replace_callback(
        '/\[quote=([^\]]+)?\]([^\[]+)?\[\/quote\]?/',
        create_function(
            '$matches',
            'return \'"[quote=" is replaced by "<span class=\"quote\">\'.$matches[1].\' says: ",\';'
        ),
        '[quote=person]some text here[/quote]'
    );
于 2010-04-01T16:03:48.957 に答える