PHP替换不同长度的子串

时间:2014-04-15 20:10:20

标签: php string substr

我正在寻找用不同长度的新值替换子字符串。我对substr_replace有一个模糊的把握,但如果重新连接字符串比原始字符串短,则会留下额外的字符。

我需要编辑的基本字符串看起来像这样

In Target(+-50%): <span style="color: red">33%</span>(1/3)<br>

我需要在结束后更换所有内容&gt;跨度标签和开头之前&lt; br标签。但是,字符数会有所不同。

例如:我要删除的字符串是“33%(1/3)”,即7个字符。我想用“9%(9/100)”替换它,这是16个字符。我不想覆盖br标签。

这似乎应该很简单,但我无法理解它。我应该看看preg_replace吗?

2 个答案:

答案 0 :(得分:2)

<?php
$subject = 'In Target(+-50%): <span style="color: red">33%</span>(1/3)<br>';
$pattern = '/<span\b[^>]*>(.*?)<\/span>(.*?)<br>/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
$subject = str_replace($matches[1][0], 'REPLACE WITH THIS TEXT', $subject);
$subject = str_replace($matches[2][0], 'REPLACE SECOND PART WITH THIS TEXT', $subject);

print_r($subject);
?>

答案 1 :(得分:-1)

这应该分开你需要的东西:

preg_match('#(<span[^>]*>)(\d+\%)(</span>)(\(\d+/\d+\))#', $str, $matches);
var_dump($matches);

然后您可以使用str_replace匹配。