모든 body 및 html 선택기를 사용자 정의 클래스로 바꾸려고합니다. (. 나중에 HTML 콘텐츠에이 사용자 지정 컨테이너에 표시됩니다 및 사용 가능한 CSS를 메인 사이트에 영향을주지해야한다) 여기 PHP 정규식 - 패턴이 일치하지 않습니다.
이있는 나는 시도했다 :$data = "html body { color: red; }\nbody html { color: red; }\nhtml, body { color: red; }\nbody, html, .body table, #html-TemplateContainer {\nbackground-color:#eee;\n}";
echo "<pre>".preg_replace('/(^|[,}\s]+)(body html|html body|html|body)([,.{\s]*)/is', '$1'.'.foo'.'$3', $data)."</pre>";
인쇄 어느 :
.foo { color: red; }
.foo { color: red; }
.foo, body { color: red; }
.foo, html, .body table, #html-TemplateContainer {
background-color:#eee;
}
3 행과 4 행에서 본문과 html (scnd selector)이 대체되지 않는 이유를 이해하지 못합니다. 내 이해를 위해 정규식과 일치해야합니까?!
** HTML 및 CSS를 처리하기 위해 정규 표현식을 사용하지 마시고 대신 HTML 파서를 사용하십시오. –
일치 항목은 대체물에서 겹칠 수 없으므로 3 행에서 'html'(끝 부분 포함)과 일치하고 'body'와 일치 할 수 없습니다. – cmbuckley
내 요구 사항에 맞는 html 파서를 제안 할 수 있습니까? 쉽게 처리하기 위해 이미 csstidy를 사용하지만 선택기를 다른 것으로 간단히 바꿀 수는 없습니다. 나 또한 사바 웜을 시도했지만 네임 스페이스로 인해 깨울 수는 없었다. ( @cbuckley 아 .. 덕분에 내가 알게 됐어 .. 선견자가 되려구? 알았어. .. – Hasenpriester