2011-01-13 5 views
0

정규 표현식에 익숙하지 않아서 까다 롭습니다. 당신이 볼 수 있듯이, 내 문제는 아주 간단합니다 ...html 콘텐츠를 제외하고 html 콘텐츠에 단어 랩핑 적용

$text = wordwrap($text, $cutLength, " ", $wordCut); 
    $text = nl2br(bbcode_parser($text)); 
    return $text; 

: 내가 원하는 모든 단어 잘림을 적용하는 것입니다 (기본적으로

, 나는 고전 html 태그가 포함 된 콘텐츠에 자동 줄 바꿈을 적용하고있어) html, href, src ...에있을 수있는 내용을 제외하고 내 콘텐츠에 ...

누군가 나를 도울 수 있습니까? 고마워요!

+1

당신은 HTML을 구문 분석해야 할 것입니다. 수색을하십시오, 다만 그것에 관하여 대략 1000의 포스트가 여기있다. 어쩌면 strip_tags를 사용하여 포장 한 다음 원본과 다시 결합 할 수 있습니다. – profitphp

답변

1

당신은 물론 HTML 구문 분석에 대한 정규식을 사용하지 말아야 "어떻게 (선택적)가에 함수를 적용 할 HTML 문서의 텍스트 내용을 가져 오기 위해" 하지만 원하는 경우
콘텐츠를 분리해야합니다. PHP의 지식이 제한되어 있으므로이 절차 만 설명합니다.

$tags = 
' < 
    (?: 
     /?\w+\s*/? 
    | \w+\s+ (?:".*?"|\'.*?\'|[^>]*?)+\s*/? 
    | !(?:DOCTYPE.*?|--.*?--) 
    )> 
'; 

$scripts = 
' < 
    (?: 
     (?:script|style) \s* 
    | (?:script|style) \s+ (?:".*?"|\'.*?\'|[^>]*?)+\s* 
    )> 
    .*? 
    </(?:script|style)\s*> 
'; 

$regex =/($scripts | $tags) | ((?:(?!$tags).)+) /xsg; 

대체 문자열 그룹 1은 (내용, 그룹 2 문자열을 전달) 당신의 줄 바꿈 기능의 반환 값에 catted입니다 그래서 같은 : 교체 = \ 1. 텍스트 랩 (\ 2)
텍스트 랩 내부에서 콘텐츠를 어떻게 처리할지 결정합니다.

은 (BTW 매우 느리고 명확하게 약화) 펄에서 테스트 :

use strict; 
use warnings; 

my $tags = 
' < 
    (?: 
     /?\w+\s*/? 
    | \w+\s+ (?:".*?"|\'.*?\'|[^>]*?)+\s*/? 
    | !(?:DOCTYPE.*?|--.*?--) 
    )> 
'; 

my $scripts = 
' < 
    (?: 
     (?:script|style) \s* 
    | (?:script|style) \s+ (?:".*?"|\'.*?\'|[^>]*?)+\s* 
    )> 
    .*? 
    </(?:script|style)\s*> 
'; 

my $html = join '', <DATA>; 

while ($html =~/($scripts | $tags) | ((?:(?!$tags).)+) /xsg) { 
    if (defined $2 && $2 !~ /^\s+$/) { 
     print $2,"\n"; 
    } 
} 
3

any DOM parser capable of extracting the text nodes을 문서에서 사용하십시오. 텍스트 노드를 반복하고 wordwrap을 적용한 다음 해당 텍스트 노드에 다시 씁니다.

접근 방식은

단지 대신 링크에 대한 텍스트 내용을 확인하는

에 주어진 하나와 동일합니다, 당신은 그들에 wordwrap을 적용합니다.

문제의 일반적인 어법은 다음과 같습니다

관련 문제