2010-05-22 6 views
0

http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543에서 "Florida (FL)"을 추출하려고합니다. 내 코드는 preg_match, regexp, php, 텍스트를 HTML에서 추출

 
//get location 
    $pattern = "/(State)</i>:</td>(.*)</td>/"; 
    preg_match_all($pattern, $htmlContent, $matches); 
    print_r($matches); 
왜 작동하지 않는지 알 수 있습니까?

+0

이것은 계속 변함없는 것처럼 보입니다. 가능한 경우 html을 구문 분석하기 위해 regexp를 사용하지 마십시오. 그 일을위한 도구가 아닙니다. –

답변

0

그 이유는 일치하려는 문자열이 다음 줄에 있기 때문입니다.

$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m"; 

하지만 기억 : 정규 표현식으로 HTML을 구문 분석을 시도하는 것은 거룩하지 못한 아이가 처녀의 피를 눈물을 만드는 당신은 다중 회선 모드를 활성화해야합니다. 참조 : 당신이 정규식에 (State)이있을 때

RegEx match open tags except XHTML self-contained tags

1

, 그것은 그룹으로 입력 문자열의 용어 State 일치합니다, 그것은 입력에서 문자 괄호 일치하지 않습니다 - 당신은 탈출해야합니다 그들과 함께 / s - /\(State\)<\/....

다음 공백이 많이 있습니다 (새 줄 포함 - m 수정자를 포함해야 함) 및 <b/> 태그가 정규식에 포함되지 않은 것처럼 보입니다. 이러한 문제를 해결할지라도, 근근이 살아가고있는 웹 사이트에서 사용 된 정확한 마크 업에 크게 의존해야합니다. 정규식을 사용하여 HTML을 구문 분석 할 때 발생하는 일반적인 문제입니다. HTML 파서를 사용하는 것이 좋습니다 (예 : 새로운 DOMDocument 만들기 및 loadhtml 메소드 호출).

+0

나는 HTML 파서를 제안하고 있었지만 웹 페이지를보고 나서 마음이 바뀌었다. 수업도 ID도 CSS도 없다. 국가를 쉽게 찾을 수 없습니다. –