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 に答える