2010-01-02 4 views
0

html 문서의 텍스트를 추출하고 싶습니다. 예를 들면 :정규 표현식을 사용하여 HTML에서 텍스트와 링크를 추출하십시오.

이 HTML 코드에서

<div class="CssClass21">bla1 bla1 bla1 <a href="http://www.ibrii.com">go to ibrii</a> bla2 bla2 bla2 <img src="http://www.contoso.com/hello.jpg"> <span class="cssClass34">hello hello</span> 

나는 대체하여 텍스트를 추출 할 수 있습니다 내가 정규식 <[^>]*> 발견 StackOverflow의 다른 글에서는 바로이

bla1 bla1 bla1 <a href="http://www.ibrii.com">go to ibrii</a> bla2 bla2 bla2 hello hello 

을 추출하고 싶습니다 매치마다 아무것도. 일치에서 앵커 태그를 제외하려면 어떻게해야합니까? RegEx가 역 매칭을 허용하지 않는 것 같습니다.

+3

HTML 파서를 사용하십시오! 정규식은 HTML을 올바르게 구문 분석 할 수 없습니다. –

+0

다음 게시물을 놓쳤습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

어떤 프로그래밍 언어를 사용하고 있습니까? 답변은 귀하가 우리에게 말하면 훨씬 관련이 있습니다. –

답변

0

일시적으로, 다른 무언가로 <a href ...>...</a>를 인코딩 한 후 다른 모든 태그를 제거 <a> 태그 복원 : 나는 NUL 및 SOH 문자를 사용하는 위의 코드에서

// Example in javascript: 
string. 
    replace(/<a(.*?)>/g,'\0$1\0'). 
    replace(/<\/a>/,'\1'). 
    replace(/<[^>]*>/,''). 
    replace(/\0(.*?)\0/,'<a$1>'). 
    replace(/\1/,'</a>'); 

를 (ASCII은 0x00 및 0x01로) <a> 태그 교체로 단순히 문자열에 나타날 가능성이 매우 낮기 때문입니다. 문자열에 나타나지 않는 다른 문자 또는 일련의 문자로 자유롭게 바꾸십시오.

다른 의견은 브라우저에서 작동하는 것 같습니다. 이 경우 브라우저는 이미 HTML을 구문 분석하여 멋진 DOM 트리로 만듭니다. 트리를 분석하고 그것을 당신이 원하는 방식으로 처리하기 위해 DOM의 방법을 사용

function simpleHTML (domNode) { 
    var ret = ""; 
    if (domNode.nodeType === Node.ELEMENT_NODE) { 
     var children = domNode.childNodes; 
     for (var i=0;i<children.length;i++) { 
      var child = children[i]; 

      // Filter out unwanted nodes to speed up processing. 
      // For example, you can ignore 'SCRIPT' nodes etc. 
      if (child.nodeName != 'SCRIPT') { 
       if (child.nodeName == 'A') { 
        ret += '<a href="' + child.href + '">' + 
           simpleHTML(child) + 
          '</a>'; 
       } 
       else { 
        ret += simpleHTML(child); 
       } 
      } 
     } 
    } 
    else if (domNode.nodeType === Node.TEXT_NODE) { 
     ret += domNode.nodeValue; 
    } 
    return ret; 
} 
// serialize the whole document: 
var simpleDocument = simpleHTML(document.body); 

// serialize a div: 
var simpleDiv = simpleHTML(document.getElementById('some_div')); 

// filter a html formatted string: 
var temp = document.createElement('DIV'); 
temp.innerHTML = original_string; 
simple_string = simpleHTML(temp); 
+0

당신은 바위 사람;) – Licx

2

정규 표현식은 lookahead을 통해 부정이 아닌 사소한 형태를 허용 않지만이 경우에는이 때문에 훈련처럼 좋은 것을, regexp가 HTML과 함께 언급 될 때마다 거룩한 불로 타는 열광적 인 사람은 아니지만, 이것은 파서로 해결해야 할 문제입니다.

관련 문제