2009-05-18 4 views
1

이미지 태그의 src, width 및 height 속성과 일치하는 정규 표현식을 작성하려고합니다. 너비와 높이는 선택 사항입니다.img 태그의 src, height 및 width 속성과 일치하는 REGEX 작성

내가 해낸 한 다음

(?:<img.*)(?<=src=")(?<src>([\w\s://?=&.]*)?)?(?:.*)(?<height>(?<=height=")\d*)?(?:.*)(?<width>(?<=width=")(\d*)?)? 

프레소이 일치를 보여줍니다 다음 HTML은 내가 정말 가까이 누군가 해요 바라고

<img src="myimage.jpg" height="20" /> 
<img src="anotherImage.gif" width="30"/> 

스 니펫 만의 src 비트 여기 내가 잘못하고있는 것을 지적 할 수있다. 나는 캐릭터들 사이에서 나의 선택 사항을 조금씩 느끼고있다. bit (? :. *) 나는 그것을 욕심 많지 않게 성공 시키려고 노력했다. 그래서 어떤 포인터?

+2

당신이 정규식을 사용해야하는 이유는 무엇입니까? HTML 구문 분석 라이브러리를 통해이를 실행할 수없고 대신 XMLReader 함수를 사용할 수 있습니까? – duckyflip

+1

정규식 구문이 다른 언어로 다릅니다. 그래서 어떤 언어를 사용하고 있습니까? 펄, 루비, 뭔가? 더 중요한 것은 정규식 대신 html 파서를 사용하는 것입니다. src가 너비와 높이보다 이전이 아닌 경우 정규 표현식이 일치한다고 생각합니까? – dave4420

답변

9

정규식을 사용하여 HTML에서 값을 가져 오는 것은 항상 실수입니다. HTML 문법은 훨씬 더 복잡하여 처음에는 나타날 수 있으며 아주 복잡한 정규 표현식조차도 페이지에서 쉽게 찾을 수 있습니다.

대신 HTML Parser을 사용하십시오.

This question has been asked before 다시 묻습니다. 정규 표현식은이 문제에 대한 좋은 선택 인 것처럼 보이지만 그렇지 않습니다.

+0

HTML Parser를 사용하는 것이 훨씬 쉬워졌습니다. HTMLAgilityPack을 사용하여 훨씬 더 빠르게 제어 할 수있었습니다. 많은 감사 – MJJames

1

대부분의 정규 표현식에서 .*은 "greedy"이며 오버 마트됩니다. .*?을 사용하여 가능한 한 적게 일치 시키십시오.

1

나는 그것을 테스트 할 기회가 없었어요,하지만 어쩌면이 당신을 위해 작동 (I라는 이름의 일치를 사용하지 않은 점에 유의)됩니다

<img(?:(\s*(src|height|width)\s*=\s*"([^"]+)"\s*)+|[^>]+?)*> 
관련 문제