我要替換HTML文本關閉按標籤幫助的了preg_replace
start_ticker 代碼.... end_ticker
我沒有成功
我的代碼是
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
我要替換HTML文本關閉按標籤幫助的了preg_replace
start_ticker 代碼.... end_ticker
我沒有成功
我的代碼是
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
默認情況下「。」與換行符不匹配 - 您可以添加「s」(DOTALL)修改器來改變它。 我懷疑這是你的問題。
$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/is',"bla bla",$string_html);
我想你想保留開始/結束標籤。然後你需要用括號來捕獲它們:
$string_html = preg_replace('/(<!-- start_ticker -->).*(<!-- end_ticker -->)/i', '$1bla bla$2', $string_html);
請注意,雖然正則表達式並不是HTML的最佳選擇。
您需要:
$match1 = '<!-- start_ticker -->';
$match2 = '<!-- end_ticker -->';
$replace = 'bla bla';
$string = preg_replace("/$match1(.*?)$match2/is", $match1.$replace.$match2, $string);
注意,使一個大的差異,因爲它使比賽ungreedy(*?)。這是當模式將與該模式的最大可能排列數相匹配時,而不是最少。
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
否則,你會在如果有多個匹配之間匹配從第一個到最後重挫什麼。
可以解決這個問題,即使沒有使用正則表達式:
$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));
}
}
/在代替我的每一件事情,我也得到空字符串 – 2009-07-13 07:57:20
我做了一個錯字第一次 - 應該是/是 – Greg 2009-07-13 08:07:01
如果你不't想要替換評論,然後結合這與@ soulmerge的答案 – Greg 2009-07-13 08:08:00