简单:如何用php替换"all between"?

faq*_*faq 20 php replace str-replace

$string = "<tag>i dont know what is here</tag>"
$string = str_replace("???", "<tag></tag>", $string);
echo $string; // <tag></tag>
Run Code Online (Sandbox Code Playgroud)

那么我在寻找什么代码?

rle*_*mon 23

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

输出:

<tag>your new inner text</tag>
Run Code Online (Sandbox Code Playgroud)

  • 如果您觉得有一个更好的答案,可以提供答案,但是当它完全符合编写本文时需要做的事情(并且OP明确同意)时,我绝不会说这个答案是“ 100%错误”。 (4认同)
  • 这个答案100%不正确。它提供所需的输出只是偶然的。当输入略有变化时,请注意此答案会失败。https://3v4l.org/p507L 这是对否定字符类的错误使用,并且误导了研究人员。@常问问题 (3认同)

Fel*_*ing 23

通用功能:

function replace_between($str, $needle_start, $needle_end, $replacement) {
    $pos = strpos($str, $needle_start);
    $start = $pos === false ? 0 : $pos + strlen($needle_start);

    $pos = strpos($str, $needle_end, $start);
    $end = $pos === false ? strlen($str) : $pos;

    return substr_replace($str, $replacement, $start, $end - $start);
}
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 比接受的答案更好.除非您需要,否则无需使用正则表达式替换. (2认同)

Fiv*_*ell 8

$string = "<tag>I do not know what is here</tag>";
$new_text = 'I know now'; 
echo preg_replace('#(<tag.*?>).*?(</tag>)#', '$1'.$new_text.'$2' , $string); //<tag>I know now</tag>
Run Code Online (Sandbox Code Playgroud)