带有属性值的preg_replace

时间:2013-05-12 20:55:23

标签: php preg-replace

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

我想用font-size:\10px; (font-size:(.*?)0px;)替换它,以便例如如果属性值为7则字体大小为70.但是它认为我想要值\ 10。如何分离属性值和0?

是否可以像'font-size:'.\1.'0px;'或类似的东西一样将属性值与零分开?

3 个答案:

答案 0 :(得分:4)

\${1}0是记录here的解决方案。

[编辑]

我尝试了所有可能数量的反斜杠,并且不得不说..对我来说它绝对没有感觉,

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

输出1${1}45

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

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

答案 1 :(得分: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>

答案 2 :(得分: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!!';

是的,不需要反斜杠