2011-02-13 3 views
0

이벤트, 이름, 학교, 최종 수영 시간 및 수영 한계 값 (DIIA)을 결과 페이지에서 (http://www.gliac.org/sports/mswimdive/2010-11/stats/Results_Wed_Finals.htm)와 같은 정규식으로 지정해야합니다. 결과는 "pre"html 태그로 나머지 페이지와 구분됩니다.정규식을 구성하여 복수 데이터 추출

각 "라인"은 다음과 같다 :

1 Donahue, Maura   19 INDY    10:39.77 10:03.60 DIIA 

불행하게도, 나는 그렇게 할 정확히 모르겠어요. 문제 중 하나는 (내 마음에!) 때로는 수영 선수의 나이 (19)와 그렇지 않은 시간이 표시된다는 것입니다. 또한 때로는 결과에 시드 시간 (10:39.77)이 표시되고 다른 시간에는 최종 시간 (10:03.60) 만 표시됩니다.

이름에서 ","으로 분할하려고 시도했지만 정규식을 시작했지만 비참하게 실패했습니다.

HTML 페이지의 내용을 추출하는 데 simple_html을 사용하고 있습니다.

내 코드 (내가 PHP를 사용하고 있습니다) 다음과 같습니다 : 당신이 도와 또는 올바른 방향으로 날 지점 수 있다면

$results_url = "http://www.gliac.org/sports/mswimdive/2010-11/stats/Results_Wed_Finals.htm"; 
// Create a DOM object from a URL 
$html = file_get_html($results_url); 
if (!$html->find('pre')) { 
    $parse_error = "Yes"; 
} 
if (!isset($parse_error)) {  
     $regex = "/[0-9]+(?=[ \s]+)(?=[A-Za-z]+)/"; 
     $splits = preg_split($regex, $html, PREG_SPLIT_DELIM_CAPTURE); 
     print_r($splits);  
} 

것은, 그 좋지 않을까! 이 데이터를 추출하기 위해 결과에 대한 정규식을 실행할 수도 있습니까?

감사합니다.

+0

이 페이지의 서식은 매우 고정적입니다. 당신은 이것을 위해 문자열 조작을 고려 했습니까? 고정 길이 서식을 활용할 수 있습니다. –

+0

코드는 모든 결과에 대해 실행되는 스크립트 용이지만 충족 결과의 형식은 항상 pre 태그와 all 내에서이 형식과 비슷합니다. 문자열 조작으로 생각하고있는 것에 대한 자세한 정보를 제공해 주시겠습니까? – Robert

답변

0

내가 늘 모든 숫자가 무엇을 의미하는지 알고 척 (아래 링크 참조)는 preg_match() 또는으로, preg_match_all를 사용할 수처럼 들리지만, 여기 뭔가 각 사람의 첫 번째 줄을 시작하는 데 도움이됩니다.

preg_match_all('/(?P<position>[0-9-]+)\s+(?P<last>[a-z]+)\s*,\s*(?P<first>[a-z]+)\s+((?P<age>[0-9]{2})\s)?(?P<school>[a-z -]+[a-z])\s+(?P<seed>(NT|[0-9:.]+))\s+(?P<final>[0-9:\.]+)\s+(?P<division>[a-z]+)/is', $html, $matches); 
print_r($matches); 

는 정규 표현식은 매우 기초적인 수준이고 지금 작동하는 것 같다,하지만 내용을 처리 할 때 당신은 당신이 더 많은을 설명 할 수 있습니다, 통제권이 없습니다. 예를 들어, 지금은 이름 일치가 악센트 부호가있는 이름이나 O'Reilly과 같은 구두점 문자가있는 이름으로 작동하지 않습니다.

+0

과 일치하는 정규식을 구성하는 것입니다.이 코드는 내가 할 수있는 것처럼 보입니다. 내가 알아낼 수 없다면 나는 다시 올릴거야. 고맙습니다! – Robert