0

ええと..私は自分でブログを作成していて、「POSTS」のpreg_replaceを作成しました。次に、次のように入力します。

[code="php"]foobar[!code]

彼は印刷します

<script type="syntaxhighlighter" class="brush: $1; html-script: true"><![CDATA[ foobar ]]></script>

このpreg_replaceですべてが正常に実行されます。

/\[code="(.*?)"\]/

(プレフィックス用)

/\[!code\]/

(接尾辞用)

しかし今、私は追加のオプションを追加したいのですが、ユーザーがタイプしたかどうかを確認してください...アイデアはそのようなものになることです:

[code="php" [1,3]]
foo
[!code]

これを返す:

<script type="syntaxhighlighter" class="brush: $1; highlight: [1,3]; html-script: true">...

それ以外の場合、$ 2がない場合(ユーザーが[code = "php"]のみを入力した場合)、これを返します。

<script type="syntaxhighlighter" class="brush: $1; html-script: true">

同じpreg_replaceでこのステートメントを作成するにはどうすればよいですか?事前に感謝し、悪い英語をお詫びします。

編集

*preg_replace_callback*で解決策を達成しました

4

1 に答える 1

1

必要なことを行うには、 preg_replace_callback を使用する必要があります。

function format_prefix($matches)
{
    return '<script type="syntaxhighlighter" class="brush: '
        . $matches[1]
        . (isset($matches[2]) ? '; highlight: ' . $matches[2] : '')
        . '; html-script: true">';
}

$s = '[code="php"]foobar[!code]'."\n".'[code="php" [1,3]]foobar[!code]';

echo preg_replace_callback('/\[code="(.*?)"(?:\s+(\[\d+,\d+\]))?\]/', 'format_prefix', $s);
于 2013-02-10T13:20:05.863 に答える