2014-02-19 4 views
0

나는이 파일은 다음과 같은 내용이있다 "TEST.TXT"라는 한 : 나는 그것을 데이터를 추출하는 기능을 원하는 나는 "30 대-200에 대한 싶습니다추출 텍스트 PHP

BEGIN_SESSION 7 
1h+ 47 
30mn-1h 20 
15mn-30mn 16 
5mn-15mn 43 
2mn-5mn 29 
30s-2mn 35 
0s-30s 170 
END_SESSION 

과 "과"0-30은 35 + 170 = 205 " 그리고 나는이 시도했다"는 말에있을거야 예를 들어 가치를 추가 할 수 있습니다 "하지만 작동하지 않습니다

preg_match("/BEGIN_SESSION(.*)END_SESSION/is", $test, $matches); 
$session = $matches[0] ; 
preg_match('/^30s-2mn ([0-9]{14}) /ms', $test, $matches); 
$data= $matches; 
var_dump($data); 

내 코드의 문제점은 무엇입니까?

답변

1

먼저 PHP에 실수가 있습니다. 두 번째로 preg_match$session 대신에 $test을 다시 사용합니다.

둘째로 귀하의 RegEx는 단순히 일치 할 수 없습니다. 캐럿 (^)은 PHP가 테스트 대상의 시작 부분에서 검색을 시작하도록 지시하지만 30s...이 없으며이 30s...은 테스트 문자열 어딘가에 있습니다. 그래서 그것을 제거하십시오. 그리고 PHP에 0-9에서 14 개의 숫자가 있다고 말하면서, 두 개를 찾고 있습니다. 그래서 작업 정규식은 다음과 같습니다

/30s-2mn ([0-9]{2})/ms 

수정 :

preg_match("/BEGIN_SESSION(.*)END_SESSION/is", $test, $matches); 
$session = $matches[0] ; 
preg_match('/30s-2mn ([0-9]{2})/ms', $session, $matches); 
$data= $matches; 
var_dump($data); 

무엇을 출력한다 :

array(2) { [0]=> string(10) "30s-2mn 35" [1]=> string(2) "35" } 

을 그리고 지금 어떤 수학 수행

preg_match("/BEGIN_SESSION(.*)END_SESSION/is", $test, $matches); 
$session = $matches[0]; 
preg_match('/30s-2mn ([0-9]{2})/ms', $session, $matches); 
$a = $matches[1]; 
preg_match('/0s-30s ([0-9]{3})/ms', $session, $matches); 
$b = $matches[1]; 

var_dump($a+$b); 

인쇄 :

int(205) 
+0

관측에 감사드립니다. – user3323019

+0

당신을 진심으로 환영합니다. – idmean

+0

당신은 이것 좀 봐 주시겠습니까 : http://stackoverflow.com/questions/21887606/extract-file-in-php-and-display-content-in-chart 그리고 대단히 감사합니다 – user3323019