2011-08-16 4 views
1

무엇을 사용해야합니까?XML 파서 vge regex

링크, 이미지, 텍스트 등을 가져 와서 건물 통계 및 페이지 분석을 사용하는 데 사용하려고합니다.

무엇을 사용 하시겠습니까? XML 구문 분석기 또는 정규 표현식

정규 표현식을 사용했지만 결코 문제가 발생하지 않았지만 사람들로부터 몇 가지 일을 할 수 없다는 말을들은 적이 있습니다.하지만 솔직히 말해서 저는 ' 왜 그런지는 알고 있지만 XML 파서를 사용하는 것을 두려워하고 정규 표현식을 선호한다. (그리고 잘 작동한다.)

그렇다면 모든 것이 정규식과 잘 작동하는 이유는 무엇인가? 글쎄, 나는 모든 것이 지금까지는 괜찮 았지만 그것이 미래에도있을 것이라는 것을 의미하지 않는다고 생각한다. 그래서 나는 정규 표현식에 XML 파서를 사용하는 것의 이점이 무엇인지 알고 싶었다. 퍼포먼스 향상, 오류 발생 가능성 감소, 더 나은 지원, 기타 광택 기능 등이 있습니까?

당신이 하나를 추천하는 다음 XML 파서를 사용하는 것이 좋습니다 경우

는 내가 가장 확실히 알고 싶습니다

왜 다른 통해 하나를 선택 할 PHP

에 사용되는?

+2

[장단점] (http://stackoverflow.com/questions/3650125/how-to-parse-html-with-php/3650431#3650431)이 있습니다. 광범위한 웹 사이트에서 추출한 경우 정규식 추출보다는 DOM 파서를 사용하는 것이 가장 간단합니다 (따라서 더 나은 옵션). 비록 당신이 추출하고자하는 것에 대해서는 구체적이지 않았습니다. – mario

답변

2

실제 (X) HTML을 처리하는 경우 XML 구문 분석기가 아닌 HTML 파서가 필요합니다. XML 파서는 올바른 형식의 오류가 발생하는 즉시 파싱을 중지해야하기 때문에 필요합니다. 거의 대부분의 HTML로 즉시.

HTML을 처리하기위한 정규식에 대한 요점은 신뢰할 수 없다는 점입니다. 모든 정규식의 경우 실패 할 HTML 페이지가 있습니다. HTML 파서는 정규식처럼 사용하기 쉽고 브라우저처럼 HTML을 처리하므로 매우 안정적이며 HTML을 사용하지 않는 이유는 거의 없습니다.

한 가지 예외는 통계 목적으로 샘플링하는 것입니다. 매우 단순한 패턴 (예 : 특정 속성의 존재)으로 100,000 개의 웹 페이지를 스캔하고 얻은 일치하는 페이지의 비율을 반환한다고 가정합니다. 잘 설계된 정규 표현식조차 오탐 (false positive)과 거짓 네거티브 (false negative)를 생성 할 가능성이 높지만, 전체 퍼센티지 스코어에 큰 영향을 미치지는 않습니다. 정규식 스캔이 각 페이지의 전체 구문 분석보다 빠르게 실행될 수 있다는 이점을 위해 잘못된 일치 항목을 받아 들일 수 있습니다. 그런 다음 정규식 일치를 반환하는 페이지에서만 구문 분석을 실행하여 오탐 (false positive) 수를 줄일 수 있습니다. 당신이 스크린 스크래핑을하고있는 것처럼 나에게 소리 Can you provide some examples of why it is hard to parse XML and HTML with a regex?

0

:

정규 표현식에 대한 어려움의 원인이됩니다 문제의 종류 참조 참조하십시오. 이것은 필연적으로 다소 휴리스틱 한 과정입니다. 관심있는 웹 페이지에서 일반적으로 발생하는 패턴을 찾고 있으며, 필연적으로 그 중 몇 개를 그리워 할 것이며 실제로 신경 쓰지는 않을 것입니다.예를 들어 img 태그를 검색하면 주석 처리되는 img 태그도 찾을 수 있습니다. 이것이 응용 프로그램의 특징이라면 정규 표현식을 사용하여 HTML 또는 XML을 처리하는 것에 대한 일반적인 제한이 적용되지 않을 수 있습니다.