HTML 파싱에 대한 정규 표현을 작성하는 방법은 무엇입니까?
-
16-09-2019 - |
문제
HTML 파서에 대한 정규 표현을 작성하려고합니다.
HTML 태그를 주어진 속성 (예 : <div>
~와 함께 class="tab news selected"
) 하나 이상이 포함되어 있습니다 <a href>
태그. regexp는 전체 태그와 일치해야합니다 ( <div>
에게 </div>
). 나는 항상 "메모리 소진"오류를 얻는 것 같습니다. 내 프로그램은 아마도 일치하는 태그로 찾을 수있는 모든 태그를 가져옵니다.
Boost Regex 라이브러리를 사용하고 있습니다.
해결책
다른 팁
당신은 아마 볼 것입니다 이 질문 답장. Regexps 및 HTML. 요점은 HTML을 구문 분석하기 위해 정규 표현식을 사용하는 것이 어떠한 이상적인 솔루션이 아니라는 것입니다.
아마도 regexps가 최선의 솔루션은 아니지만 이미 5 개의 다른 라이브러리를 사용하고 있으며 찾을 때 부스트가 잘 작동합니다. <a href>
태그 및 키워드.
이 regexps를 사용하고 있습니다.
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
찾기 위해 <a href>
태그 및 :
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
링크를 찾기 위해
(btw는 더 잘할 수 있습니까? - 나는 Regex에서 빨기;))))))
지금 필요한 것은 포함 된 태그를 찾는 것입니다 <a href>
'S와 나는 Regexps가 올바른 일을 할 것이라고 생각합니다. 아마도 Piotr이 말한 것처럼 나만의 구문 분석 기능을 작성해야 할 것입니다.
플렉스처럼 : 일치합니다u003Cdiv> 케이스 무의미한 일치와 함께 파서를 "div matched"상태에 넣고 처리를 계속하십시오.u003C/div> 상태를 재설정합니다.
이것은 2 개의 Regexps와 상태 변수가 필요합니다.
sgml 태그 유효한 문자는 [a-za-z_ :]입니다.
so : / <[a-za-z _ :]+> / 태그와 일치합니다.