我使用preg_replace解码bbcode,我使用(.*?)
来获取属性值。
我想用font-size:\10px; (font-size:(.*?)0px;)
替换它,以便例如如果属性值为7则字体大小为70.但是它认为我想要值\ 10。如何分离属性值和0?
是否可以像'font-size:'.\1.'0px;'
或类似的东西一样将属性值与零分开?
答案 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!!';
是的,不需要反斜杠。