PHP:在多次出现时替换两个字符之间的内容

时间:2018-04-12 21:57:02

标签: php regex

我试图替换某些"特殊"之间的内容。每个出现的字符。例如,让我们说我有那个字符串:

<div><small>static content</small><small>[special content type 3]</small> 
<small>static content</small><small>[special content type 4]</small></div>

我想用方括号之间的每个&#34;特殊内容替换#34;标识符&#34;(让我们说一些&#34; ;插件&#34;。)

我已经从Stackoverflow尝试了这段代码:

$search = "/[^<tag>](.*)[^<\/tag>]/";
$replace = "your new inner text";
$string = "<tag>i dont know what is here</tag>";
echo preg_replace($search,$replace,$string);

这样可行,但仅适用于第一次出现。我需要在整个字符串中重复此操作。

我也试过这个:

echo preg_replace('/<div class="username">.+?</div>/im', '<div 
class="username">Special Username<\/div>', $string) ;

它给了我一个&#34;警告:preg_replace():未知的修饰符&#39; d&#39;在第8行和第34行的标准输入代码中;错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

stackoverflow中的代码需要进行细微更改:

$search = "/(<tag>)(.*?)(<\/tag>)/";
$replace = '$1your new inner text$3';
$string = "<tag>i dont know what is here</tag> some text <tag>here's another one</tag>";
echo preg_replace($search,$replace,$string);

答案 1 :(得分:1)

function replace_all_text_between($str, $start, $end, $replacement) {

    $replacement = $start . $replacement . $end;

    $start = preg_quote($start, '/');
    $end = preg_quote($end, '/');
    $regex = "/({$start})(.*?)({$end})/";

    return preg_replace($regex,$replacement,$str);
}