Pergunta

Eu quero substituir o texto html que fechou por tag

start_ticker código.... end_ticker

Eu não o sucesso

meu código é

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

Solução

Por padrão "" não coincide com novas linhas - você pode adicionar o "s" (dotall) modificador para mudar isso. Eu suspeito que é o seu problema.

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

Outras dicas

Você pode resolver esse problema, mesmo sem o uso de expressões regulares:

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

Eu acho que você quer manter as tags de início / fim. Então você precisa capturá-los com suportes:

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

Cuidado, porém, que as expressões regulares não são a melhor escolha quando se trata de html.

Você precisa:

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

Note que (. *?) Faz uma grande diferença, uma vez que torna o jogo ungreedy. Isto é, quando o padrão será comparado ao maior número de permutações possíveis de que o padrão, em vez do mínimo.

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

Caso contrário, você iria corresponder a partir do primeiro ao último clobbering entre em nada se houver várias correspondências.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top