0

我使用 preg_replace 来解码 bbcode 并(.*?)用来获取属性值。

我想将其替换font-size:\10px; (font-size:(.*?)0px;)为,例如,如果属性值为 7,则字体大小将为 70。但它认为我想要值 \10。我该怎么做才能将属性值和 0 分开?

是否可以做类似'font-size:'.\1.'0px;'或类似的事情来将属性值与零分开?

4

3 回答 3

4

\${1}0此处记录的解决方案。

[编辑]

我尝试了所有可能的反斜杠,不得不说..对我来说这绝对没有意义,那

echo preg_replace('/(2.)/', '\\${1}', '12345');

输出1${1}45

但我找到了一个解决方案,heredoc

$a = <<<ABC
\${1}
ABC;
echo preg_replace('/(2.)/', $a, '12345');
于 2013-05-12T21:03:34.303 回答
1

应用于此文本:

$str = <<< EOD
[size="4"]test1[/size]
[size="4]test2[/size]
[size=4"]test3[/size]
[size=4]test4[/size]
EOD;
$pattern = '@\\[size=("?)(\\d++)\\1\\](.*?)\\[/size\\]@s';

preg_replace:

$replace = '<span style="font-size:${2}0px;">$3</span>';    
echo preg_replace($pattern,$replace,$str);

preg_replace_callback:

$replace = function ($matches) {
    return sprintf('<span style="font-size:%s0px;">%s</span>',
        $matches[2],
        $matches[3]
    );
};     
echo preg_replace_callback($pattern,$replace,$str);

结果:

<span style="font-size:40px;">test1</span>
[size="4]test2[/size]
[size=4"]test3[/size]
<span style="font-size:40px;">test4</span>
于 2013-05-12T21:32:41.560 回答
0

Omg... PHP 手册造成了很大的混乱...

关于此代码:

echo preg_replace('/^(1)(2)(3)(4)(5)$/', $r, '12345');

预期输出:

12345!!12345!!

使用heredoc时:

$r = <<< EOD
$0!!\${1}2\${3}4$5!!
EOD;

但是,不使用heredoc:

$r = '$0!!${1}2${3}4$5!!';

是的,不需要反斜杠

于 2013-05-12T21:58:05.553 回答