2011-08-20 4 views
1

내가 삽입하고있어 HTML 단락 (<p></p>) : 나는 어떤 싶지 않아 제외 보인다삽입 단락이 같은 텍스트의 조각에

$text = '<p>' . preg_replace("/(\n|\r|\r\n)+/i", "</p><p>", $text) . '</p>' ; 

는 잘 작동합니다 문단은 <code></code> 블록 내에 있습니다. 이러한 블록 내의 콘텐츠는 미리 형식이 지정되어 있습니다 (스타일 사용).

어떻게 처리해야 할 지 잘 모르겠습니다. 위의 코드 줄 이후에 이러한 태그를 제거하려고했지만 그로 인해 문제가 발생하고 처음부터 삽입하지 않는 것이 훨씬 더 낫습니다.

위의 정규 표현식에서 배제하는 것이 가능합니까? 그렇지 않다면 또 뭐야?

감사

편집 : 아래 이름없는 '답변에 따라이 코드를 함께했다. 그것은 효과가있는 것처럼 보입니다.

$chunks = preg_split("/(<code>.*?<\/code>)/is", $text, -1, PREG_SPLIT_DELIM_CAPTURE) ; 
$text = '' ; 
foreach($chunks as $chunk) { 
    if (preg_match("/^<code>/i", $chunk)) { 
     $text .= $chunk ; 
    } else { 
     $text .= '<p>' . preg_replace("/(\n|\r)+/i", "</p><p>", $chunk) . '</p>' ; 
    } 
} 
+0

죄송합니다. 이 텍스트 "라인 하나 \ n \ n 연구 \의 nLine 세 \ nLine 네 \ \ rLine 두 사람은" "

라인 하나

라인이

라인 세

4 번

을"이 될 것입니다. 그리고 나는 CSS가 스타일링을위한 것이라는 것을 알고 있지만, HTML은 여전히 ​​CSS에 스타일을 적용 할 위치를 알려줍니다. –

+0

당신은 이것을 위해 HTML 툴킷을 사용하고 싶습니다. http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662를 참조하십시오. – Gordon

답변

1

글쎄, 그것은 PCRE 정규식 엔진 가능합니다. 그러나 매우 비합리적이며 자원이 많이 든다.

$text = '<p>' . preg_replace("/(\n|\r|\r\n)+(?!(.(?!<code>))*<\/code>)|(\n|\r|\r\n)+(?=<code>)/is", "</p><p>", $text) . '</p>' ; 

이 작업에 추가 RAM을 사용할 수 있다면 DOM을 사용하는 것이 가장 좋은 해결책 일 수 있습니다. 그렇지 않다면 <code> ... </code> 청크로 미리 문자열을 나눌 수 있고 <code>이 아닌 청크에 정규 표현식을 사용하는 것보다 문자열로 다시 묶을 수 있습니다.

+0

감사. 그것을 분할하는 아이디어는 좋은 것 같습니다. 나는 그 제안에 기반 해 나의 해결책을 편집했다. 작동하는 것 같습니다. 가장 효율적인 방법인지는 모르겠지만 언젠가는 DOM을 살펴볼 것입니다. –

-1

HTML을 정규식으로 구문 분석하려고 시도한 적이 없습니다. 예를 PHP의 DOM에 대한

사용 : http://php.net/manual/en/book.dom.php

:

+0

PHP의 표준 설치 부분입니까, 아니면 별도로 설치해야합니까? 후자의 경우, 나는 그것에 접근 할 수 없을지도 모른다. –

+0

@MCXXII :'libxml '을 설치해야합니다. 그것은 기본적으로 설치되어 있지만 나는 생각합니다. 설치된 확장을 다음과 같이 점검 할 수 있습니다 :'phpinfo();' – PeeHaa

+0

설치되어 있습니다. 나는 어떤 점에서 그것을 들여다 볼지도 모른다. 링크를 가져 주셔서 감사합니다. –

관련 문제