preg_replace ile yardımcı

3 Cevap php

i etiketi tarafından kapatıldı html metni değiştirmek istiyorum

start_ticker code.... end_ticker

i başarı yok

benim kodudur

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

3 Cevap

Hatta düzenli ifadeler kullanmadan bu sorunu çözebilir:

$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));
    }
}

Ben başlangıç ​​/ bitiş etiketlerini tutmak istiyorum sanırım. Sonra parantez onları yakalamak gerekiyor:

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

Bu html geldiğinde düzenli ifadeler iyi seçim olmadığını, ama dikkat edin.

İhtiyacınız olanlar:

$match1 = '<!-- start_ticker -->';
$match2 = '<!-- end_ticker -->';
$replace = 'bla bla';
$string = preg_replace("/$match1(.*?)$match2/is", $match1.$replace.$match2, $string);

Bu maç ungreedy yapar beri unutmayın (. *?) Büyük bir fark yaratıyor. Desen ziyade bu modelin olası permütasyon büyük sayı, en azından uyumlu olacak andır.

http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy

Aksi takdirde, ilk birden fazla maçı varsa arasında son clobbering şey maç olur.