2011-08-07 9 views
1

는 내가 현재 http://simplehtmldom.sourceforge.net/를 사용하고 있지만 낮은 RAM 사용량에 빨리 해결책이 있는지 알고 싶습니다 HTML 문서PHP는 HTML 파서 성능

<input type="hidden" name="email" id="email" value="email%40hotmail.com"> 

에서 숨겨진 입력을 추출해야합니다. 입력은 문서의 중간에 위치하므로 전체 HTML 페이지를로드 할 필요는 없습니다. 정규식이 더 빨리 작동할까요? 수백만 문서를 처리해야합니다. 명확하게하려면 이메일 만 추출해야합니다. % 40hotmail.com

답변

0

이 작업을 할 수 있습니다 :

$html = '<input type="hidden" name="email" id="email" value="email%40hotmail.com">'; 
preg_match('%<input type="hidden" name="email" id="email" value="([^\"]+)">%', $html, $email); 

는 정규식 더 빠른 내가 오류를 범하고있어

입니다 편집.

1

해당 형식과 정확히 일치하는 것이 필요한 경우에는 정규식을 사용하십시오. 범용 HTML 파싱을 할 수는 없지만 간단한 패턴을 얻을 수 있습니다.

이 그것을 할 것입니다 :

<input type="hidden" name="email" id="email" value="([^"]*)"> 

와일드 카드는 큰 따옴표 문자가 아닌 모든 항목과 일치합니다. html 엔티티를 디코딩하는 것을 잊지 마십시오.

+0

전체 입력이 아닌 VALUE 만 얻으려고합니다. 만약 당신이 내게 준 패턴을 인쇄하면 얻을 수 있습니다. [0] => 배열 ( [0] => Michael

+0

@Michael 캡처하려는 부분 주위에 괄호를 추가하면 답변이 수정됩니다. – Ariel

1

나는 XPath과 함께 꽤 빠르며 좋은 메모리를 가지고 있습니다. DomDocument이 있습니다. 또 다른 이점은 정의 된 표준을 사용한다는 것입니다. 따라서 매우 독립적이며 액세스 가능하며 일반적으로 작업을 완료하는 데 필요한 것이므로 동일한 라이브러리를로드하는 것보다 조금 가볍습니다.

간단한 문자열 검색 (시작 패턴 찾기, 끝 패턴 찾기)은 빠를 수 있지만 문서가 변경되면 확장되지 않습니다. 그러나 정규 표현식을 컴파일하고 실행하는 것보다 훨씬 빠릅니다.