我正在寻找用不同长度的新值替换子字符串。我对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吗?
答案 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
匹配。