문제

태그로 닫은 HTML 텍스트를 대체하고 싶습니다.

start_ticker 코드 .... end_ticker

나는 성공하지 못한다

내 코드입니다

$string_html = preg_replace('/<!-- start_ticker -->.*<!-- end_ticker -->/i',"bla bla",$string_html);
도움이 되었습니까?

해결책

기본적으로 "." Newlines와 일치하지 않습니다 - "S"(Dotall) 수정자를 추가하여이를 변경할 수 있습니다. 나는 그것이 당신의 문제라고 생각합니다.

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

다른 팁

정규 표현식을 사용하지 않고도 해당 문제를 해결할 수 있습니다.

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

시작/끝 태그를 유지하고 싶다고 생각합니다. 그런 다음 괄호로 캡처해야합니다.

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

(.*?)는 경기가 무자비하게 만들기 때문에 큰 차이를 만듭니다. 이것은 패턴이 그 패턴의 가능한 가장 많은 수의 순열과 일치 할 때가 아니라 가장 적은 것입니다.

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

그렇지 않으면, 여러 경기가있는 경우 첫 번째에서 마지막 클로버링까지 일치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top