2012-09-04 4 views
1

HTML 파일을 구문 분석하고 모든 이미지 파일을 가져올 정규식을 작성하려고합니다. 이미지를 전자 메일로 보내기 전에 이미지를 포함하려면이 작업을 수행해야합니다.HTML 문자열의 모든 이미지 링크를 찾으려면 어떻게합니까?

이미지를 참조 할 수있는 "장소 목록"이 있습니까? 예를 들어, <img src="here" /> 또는 CSS 스타일 url('here') 또는 background='here'을 조사해야한다는 것을 알고 있지만 모든 경우를 다루고 있습니까?

그리고 정규식은 이미 어딘가에 존재합니까? 나는 regexes를 쓰는 것이 고통스럽고, 케이스를 놓치고 싶지 않거나 깨진 HTML 마크 업을 처리하는 것을 잊어 버린다. <img> 태그의

, 내가 이런 걸 발견

(?<=img\s+src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22]) 

을하지만 난 다른 장소를 포함하는 방법을 모르겠어요.

답변

4

는`) ... 대신, HTML을 구문 분석하는 정규식을 사용 HtmlAgilityPack

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

var a = doc.DocumentNode.Descendants("img") 
      .Select(x => x.Attributes["src"].Value) 
      .ToArray(); 
+0

+1에 대한 HtmlAgilityPack. 훌륭합니다. – Axeman

1

정규식은 poor choice for parsing HTML 인 경향이 있습니다. 특히 다른 출처의 HTML입니다.

HTML Agility Pack - 목적으로 만든 HTML 구문 분석기를 사용하는 것이 좋습니다.

정확하게 Html Agility Pack (HAP)이란 무엇입니까?

이것은 읽기/쓰기 DOM을 작성하고 일반 XPATH 또는 XSLT를 지원하는 민첩한 HTML 파서입니다 (실제로 XPATH 나 XSLT를 사용하지 않아도되므로 걱정하지 않아도됩니다 ...). "웹 외부"HTML 파일을 구문 분석 할 수있는 .NET 코드 라이브러리입니다. 파서는 "실제"형식이 잘못된 HTML에 매우 관대합니다. 개체 모델은 System.Xml을 제안하는 것과 매우 유사하지만 HTML 문서 (또는 스트림)를 대상으로합니다.

대안은 CSS 선택기 (예 : JQuery)를 사용하여 요소를 선택하는 HtmlAgilityPack 확장 프로그램 인 ScarpySharp입니다.

+0

감사와 같은 HTML 파서를 사용하지만, 그것은 도움이되지 않습니다 한 곳은'(CSS 스타일로 URL (하지 마십시오). 이 부분을 텍스트로만 파싱해야합니까? – Lou

+0

@Dilbert - A [CSS Parser] (http://stackoverflow.com/questions/512720/is-there-a-css-parser-for-c)를 해당 부분에 사용할 수 있습니다. – Oded