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

时间:2014-04-22 21:13:29

标签: php

我正试图从$ 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;

结果: - http://codepad.viper-7.com/T9sbbN

  

testMy测试代码1 {/ code}

     

Lorem ipsum dolor sit amet,consectetur adipiscing elit。

预期结果

  

Lorem ipsum dolor sit amet,consectetur adipiscing elit。

     

测试

     

Lorem ipsum dolor sit amet,consectetur adipiscing elit。

2 个答案:

答案 0 :(得分:1)

正则表达式示例

$html = preg_replace('/{code}.*{\/code}/', 'test', $html);

使用您的代码:here

查看cool reg exp builder:regexper

答案 1 :(得分:1)

这适用于一个{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;

多个看起来像这样:

<?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;
}