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 回答