我想替换标签
关闭的html文本start_ticker 码.... end_ticker
我没有成功
我的代码是
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
答案 0 :(得分:2)
即使不使用正则表达式,您也可以解决该问题:
$start = '<!-- start_ticker -->';
$end = '<!-- end_ticker -->';
$replacement = 'blabla';
$posStart = stripos($str, $start);
if ($posStart !== false) {
$posEnd = stripos($str, $end, $posStart);
if ($posEnd !== false) {
$str = substr($str, 0, $posStart) . $replacement . substr($str, $posEnd + strlen($end));
}
}
答案 1 :(得分:1)
默认情况下“。”与换行符不匹配 - 您可以添加“s”(DOTALL)修饰符来更改它。 我怀疑那是你的问题。
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/is',"bla bla",$string_html);
答案 2 :(得分:1)
我想你想保留开始/结束标签。然后你需要用括号捕捉它们:
$string_html = preg_replace('/(<!-- start_ticker -->).*(<!-- end_ticker -->)/i', '$1bla bla$2', $string_html);
请注意,正确的表达式并不是html的最佳选择。
答案 3 :(得分:1)
你需要:
$match1 = '<!-- start_ticker -->';
$match2 = '<!-- end_ticker -->';
$replace = 'bla bla';
$string = preg_replace("/$match1(.*?)$match2/is", $match1.$replace.$match2, $string);
请注意,(。*?)会产生很大的差异,因为它会使匹配失败。这是模式将匹配该模式的最大可能排列数,而不是最小数。
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
否则,如果有多个匹配,您将匹配从第一个到最后一个clobbering之间的任何内容。