문제
태그로 닫은 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
그렇지 않으면, 여러 경기가있는 경우 첫 번째에서 마지막 클로버링까지 일치합니다.
제휴하지 않습니다 StackOverflow