2009-06-29 9 views
2

다음 정규식을 사용하여 HTML 문서의 첫 번째 img 태그의 값을 src으로 가져옵니다.img 태그에서 src 값을 가져 오는 정규식

string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?" 

지금은 필요하지 않은 총 src 속성을 캡처합니다. URL이 src 속성 안에 있어야합니다. 그것을하는 방법?

답변

6

HTML을 다른 것으로 구문 분석하십시오.HTML is not regular 및 정규 표현식은 파싱에 전혀 적합하지 않습니다.

HTML이 엄격한 경우 HTML 구문 분석기 또는 XML 구문 분석기를 사용하십시오. 그것은 XPath를 사용하여 src 속성의 값을 얻기 위해 많은 쉽게 :

//img/@src 

XML 파싱은 System.Xml namespace에 내장되어 있습니다. 엄청나게 강력합니다. HTML parsing은 HTML이 엄격하지 않은 경우 조금 더 어려워 보이지만 주위에 라이브러리가 많아서 도움이 될 것입니다.

+2

그는 HTML에서 단일 태그 유형의 값을 추출하기보다는 HTML을 구문 분석하려고하지 않습니다. Regexes는 이런 종류의 일에 뛰어납니다. –

+1

@eqbridges : 그가 정규식을 생각해내는 것은 너무 복잡하기 때문에 문제에 대한 잘못된 길잡이라는 표시입니다. src 속성에 가능한 모든 값 (즉, '또는'가 포함 된 값)과 일치하지 않는다는 사실이 있습니다 .HTML/XML을이 방법으로 구문 분석하지 마십시오! 그냥하지 마세요. – Welbog

+1

@Welbog - img src의 값을 알아내는 것만으로 나는 정중하게 동의하지 않는다. 그와 같은 작업에서 HTML 파서를 사용하는 것은 과잉이다. 특별히 복잡한 작업이 필요한 경우 동의 할 확률이 더 높다. –

1

정규식은 src 속성의 태그 안의 따옴표가 아닌 따옴표 뒤에있는 문자 (영어)와 일치해야합니다. 펄 정규식에서

,이 같은 것 :

/src=[\"\']([^\"\']+)/ 

URL은이 프로그램을 실행 한 후 $1에있을 것입니다.

물론 이것은 src 속성의 URL이 인용되어 있다고 가정합니다. 그렇지 않은 경우 [] 대괄호의 값을 적절하게 수정할 수 있습니다.

+0

나를 위해 아름답게 작업했습니다. 필자의 요구 사항은 단순히 매우 구체적인 패턴을 사용하여 하위 문자열을 추출하는 것이 었습니다. 소스 문자열이 HTML이된다는 사실은 부적합합니다. HTML을 구문 분석하지 않으려는데 위의 주석 작성자가이 간단한 작업을 수행하기 위해 전체 HTML 구문 분석기를 사용하는 것이 과잉이라고 동의합니다. – djskinner

관련 문제