0

我想替换由标签关闭的 html 文本

start_ticker 代码.... end_ticker

我不成功

我的代码是

$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
4

4 回答 4

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));
    }
}
于 2009-07-13T16:39:15.607 回答
1

默认 ”。” 不匹配换行符 - 您可以添加“s”(DOTALL)修饰符来更改它。我怀疑这是你的问题。

$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/is',"bla bla",$string_html);
于 2009-07-13T07:52:58.613 回答
1

我猜你想保留开始/结束标签。然后你需要用括号捕获它们:

$string_html = preg_replace('/(<!-- start_ticker -->).*(<!-- end_ticker -->)/i', '$1bla bla$2', $string_html);

但请注意,正则表达式并不是 html 的最佳选择。

于 2009-07-13T07:54:50.687 回答
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

否则,如果有多个匹配项,您将从第一个匹配到最后一个匹配任何内容。

于 2009-07-13T16:28:58.857 回答