Php 在字符串之间获取所有内容并替换为其他内容
我试图从$html字符串中获取{code}标记之间的所有内容 到目前为止,我已经写了这篇文章,但它没有像预期的那样工作,只是替换了第一个{code} 此外,我希望这对许多代码标签都有效,但还没有达到这一步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
<?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;
}