我正试图从$ 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。
答案 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;
}