Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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 在字符串之间获取所有内容并替换为其他内容_Php - Fatal编程技术网

Php 在字符串之间获取所有内容并替换为其他内容

Php 在字符串之间获取所有内容并替换为其他内容,php,Php,我试图从$html字符串中获取{code}标记之间的所有内容 到目前为止,我已经写了这篇文章,但它没有像预期的那样工作,只是替换了第一个{code} 此外,我希望这对许多代码标签都有效,但还没有达到这一步 <?php $html = <<< EOT <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> <p>{code}My test code 1{/c

我试图从$html字符串中获取{code}标记之间的所有内容

到目前为止,我已经写了这篇文章,但它没有像预期的那样工作,只是替换了第一个{code}

此外,我希望这对许多代码标签都有效,但还没有达到这一步

<?php    

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
EOT;

$startPos = strpos($html, '{code}');
$endPos = strpos($html, '{/code}');
if($startPos !== false && $endPos !== false){
    $startPos += 6; # strlen('{code}')
    $endPos += 7; # strlen('{/code}')

    // get code
    $code = substr($html, $startPos, $endPos);

    // remove all code apart from start {code}
    $html = substr($html, $startPos-6, $endPos);

    // replace new code
    $new_code = 'test';
    $html = str_replace('{code}', $new_code, $html);
}

echo $html;
regexp exsample

$html = preg_replace('/{code}.*{\/code}/', 'test', $html);
使用您的代码:


查看cool reg exp builder:

这适用于一个{code}

<?php

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
EOT;

$startPos = strpos($html, '{code}');
$endPos = strpos($html, '{/code}');

if($startPos !== false && $endPos !== false){
    $startPos += 6; # strlen('{code}')


    // get code
    $code = substr($html, $startPos, $endPos-$startPos);


    // replace new code
    $new_code = 'test';
    $html = str_replace('{code}'.$code.'{/code}', $new_code, $html);
}

echo $html;

预期的结果是什么?@Arian刚刚添加了这个,如果有多个
{code}addasdf{/code}
标记,你想用
$new\u code
替换所有标记吗?作为一个很好的例子,是的,它在实际应用程序中进行数据库查找。我如何将其分解为首先获取代码,这样我就可以执行我的逻辑,然后像这里一样替换它是完美的。你可以在preg_replace中使用limit,第4个参数。谢谢你的工作非常完美,我认为这比使用大字符串替换稍微好一点,对吗<代码>$html=substr($html,0,$startPos-6)$新代码。substr($html,$endPos+7)@JohnMagnolia是的,它使您能够通过在函数中编辑功能。。。还要注意的是,这段代码并没有考虑到嵌套的情况,
{code}这是{code}这里{/code}和这里{/code}
Wow,这将变得越来越复杂,谢天谢地,在这个阶段还不需要它。
<?php

$html = <<< EOT
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>{code}My test code 1{/code}</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.{code}hi{/code}</p> 
EOT;

$html = test($html);

echo $html;

function test($html){
    do{
        $startPos = strpos($html, '{code}');
        $endPos = strpos($html, '{/code}');

        if($startPos !== false && $endPos !== false){
            $startPos += 6; # strlen('{code}')

            // get code
            $code = substr($html, $startPos, $endPos-$startPos);

            // replace new code
            $new_code = 'test';
            $html = str_replace('{code}'.$code.'{/code}', $new_code, $html);
        }

    }while($startPos !== false && $endPos !== false);


    return $html;
}