Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单:如何替换;“所有之间”;用php? $string=“我不知道这里是什么” $string=str_replace(“???”、“”、$string); echo$string;//_Php_Replace_Str Replace - Fatal编程技术网

简单:如何替换;“所有之间”;用php? $string=“我不知道这里是什么” $string=str_replace(“???”、“”、$string); echo$string;//

简单:如何替换;“所有之间”;用php? $string=“我不知道这里是什么” $string=str_replace(“???”、“”、$string); echo$string;//,php,replace,str-replace,Php,Replace,Str Replace,那么我在寻找什么代码呢?$code>$string=“我不知道这里有什么” $string = "<tag>i dont know what is here</tag>" $string = str_replace("???", "<tag></tag>", $string); echo $string; // <tag></tag> $string=“”; echo$string;// 还是仅仅 $string =

那么我在寻找什么代码呢?

$code>$string=“我不知道这里有什么”
$string = "<tag>i dont know what is here</tag>"
$string = str_replace("???", "<tag></tag>", $string);
echo $string; // <tag></tag>
$string=“”; echo$string;//
还是仅仅

$string = "<tag>i dont know what is here</tag>"
$string = "<tag></tag>";
echo $string; // <tag></tag>
$string=str\u replace($string,“,$string);
对不起,我无法抗拒。也许你可以用更多的细节来更新你的问题

$search=“/[^](.*)[^]/”;
$replace=“您的新内部文本”;
$string=“我不知道这里有什么”;
echo preg_replace($search,$replace,$string);
产出:

$search = "/[^<tag>](.*)[^<\/tag>]/";
$replace = "your new inner text";
$string = "<tag>i dont know what is here</tag>";
echo preg_replace($search,$replace,$string);
新的内部文本
$string=“我不知道这里有什么”;
$new_text='I know now';
echo preg_replace(“#()*?”、“$1.”、$new_text、$2'、$string)//我现在知道了
通用函数:

$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>
如果“标签”发生变化:

$string=“我不知道这里有什么”;

$string=preg_replace(“|^如果您不知道
标记中有什么,则可能还有另一个
标记,例如

$string = "<tag>i dont know what is here</tag>";
$string = preg_replace('|^<([a-z]*).*|', '<$1></$1>', $string)
echo $string; // <tag></tag>

如果您也需要更换该部分,则此功能非常有用:

$string = "<tag>i don't know what is here</tag>";
$replacement = "replacement";

$doc = new DOMDocument();
$doc->loadXML($str1);
$node = $doc->getElementsByTagName('tag')->item(0);
$newNode = $doc->createElement("tag", $replacement); 
$node->parentNode->replaceChild($newNode, $node);
echo $str1 = $doc->saveHTML($node); //output: <tag>replacement</tag>

我不得不将一个变量替换为已提交的文本区域中的一个变量。因此,我将firstName替换为Nate(包括花括号)。

一个通用的非正则表达式解决方案:

我已经修改了@felix kling的答案。现在它只会在找到针的情况下替换文本

此外,我还添加了用于更换打捆针、起始位置和更换所有火柴的参数

我使用了
mb
函数使函数多字节安全。 如果需要不区分大小写的解决方案,请将
mb\u strpos
调用替换为
mb\u stripos

$var = "Nate";

$body = "Hey there {firstName} have you already completed your purchase?";

$newBody = replaceVariable($body,"{","}",$var);

echo $newBody;

function replaceVariable($body,$needleStart,$needleEnd,$replacement){
  while(strpos($body,$needleStart){
      $start = strpos($body,$needleStart);
      $end = strpos($body,$needleEnd);
      $body = substr_replace($body,$replacement,$start,$end-$start+1);
  }
  return $body;
}

我假设您希望替换标记的内容,而不仅仅是替换整个字符串。老实说,应该使用lookaround。按原样运行此代码,我得到
警告:preg_replace()[function.preg replace]:第1行的未知修饰符“t”
此答案100%不正确。它只是偶然提供了所需的输出。请注意,当输入稍有变化时,此答案会失败。这是对否定字符类的错误使用,是错误的信息。@FAQ如果您觉得有更好的答案,请提供,但我会提供如果这个答案在写它的时候确实做了它需要做的事情(OP明确同意),那么它决不是说这个答案“100%不正确”。比公认的答案更好。除非您需要,否则无需使用正则表达式替换。@sgroves regex是一个合理的工具,它可以避免代码卷积或提供另一个合理的优势。我在PHP 7中尝试过这一点,但没有得到响应,它似乎也在剥离标记-我还想知道是否有一个选项可以用于所有出现的情况,即更多一组以上的标记,文本介于两者之间这是一个更好的解决方案!第二个参数“$1”中缺少替换字符串。“新文本”。$2”这很好,不带正则表达式。但仅当只替换字符串中的一个出现项时才可用。如果需要替换多个出现项,则必须执行循环,直到strpos返回FALSE(这意味着不再出现任何替换。这几乎是一个有效的答案。我做了一些调整。总的来说,如果可以使用DomDocument,那么应该使用它来保持稳定性。
$string = "<tag>i dont know what is here</tag>";
$string = preg_replace('|^<([a-z]*).*|', '<$1></$1>', $string)
echo $string; // <tag></tag>
<tag>something<tag>something else</tag></tag>
$string = "<tag>i don't know what is here</tag>";
$replacement = "replacement";

$doc = new DOMDocument();
$doc->loadXML($str1);
$node = $doc->getElementsByTagName('tag')->item(0);
$newNode = $doc->createElement("tag", $replacement); 
$node->parentNode->replaceChild($newNode, $node);
echo $str1 = $doc->saveHTML($node); //output: <tag>replacement</tag>
$var = "Nate";

$body = "Hey there {firstName} have you already completed your purchase?";

$newBody = replaceVariable($body,"{","}",$var);

echo $newBody;

function replaceVariable($body,$needleStart,$needleEnd,$replacement){
  while(strpos($body,$needleStart){
      $start = strpos($body,$needleStart);
      $end = strpos($body,$needleEnd);
      $body = substr_replace($body,$replacement,$start,$end-$start+1);
  }
  return $body;
}
function replaceBetween($string, $needleStart, $needleEnd, $replacement,
                        $replaceNeedles = false, $startPos = 0, $replaceAll = false) {
    $posStart = mb_strpos($string, $needleStart, $startPos);

    if ($posStart === false) {
        return $string;
    }

    $start = $posStart + ($replaceNeedles ? 0 : mb_strlen($needleStart));
    $posEnd = mb_strpos($string, $needleEnd, $start);

    if ($posEnd === false) {
        return $string;
    }

    $length = $posEnd - $start + ($replaceNeedles ? mb_strlen($needleEnd) : 0);

    $result = substr_replace($string, $replacement, $start, $length);

    if ($replaceAll) {
        $nextStartPos = $start + mb_strlen($replacement) + mb_strlen($needleEnd);

        if ($nextStartPos >= mb_strlen($string)) {
            return $result;
        }

        return replaceBetween($result, $needleStart, $needleEnd, $replacement, $replaceNeedles, $nextStartPos, true);
    }

    return $result;
}
$string = "{ Some} how it {is} here{";

echo replaceBetween($string, '{', '}', '(hey)', true, 0, true); // (hey) how it (hey) here{