2014-10-11 3 views
0

저는 PHP를 처음 접하고 정규식을 학습했습니다. preg_match를 사용하여 표준 시간을 군사 시간으로 변환하려고합니다. 오는 데이터는 "1991 년 9 월 6 일 오후 6시 23 분"형식입니다. 코드의 다른 곳에서 이미 정규 표현식을 사용하여 "Month", "Day", "Year", "Hour"및 "Minutes"요소가있는 배열로 데이터를 분리했습니다. 프로그램에서 데이터를 살펴보고 PM으로 끝나는 경우 "Hour"요소에 12를 추가하려고합니다.PHP : preg_match가있는 정규 표현식

$의 original_data는 "6:23 PM에 1991년 9월 6일"와 $ broken_data 형식의 문자열입니다
if (preg_match("/[A-Za-z0-9,:\s]*[PM]/", $original_data)) { 
     $broken_data[$j][3]= $broken_data[$j][3] + 12; 
    } 

위에 설명 된 배열입니다 : 여기 내 코드입니다. preg_match가하고있는 일은 (그리고 의도하는) A-Z, a-z, 0-9, :, 쉼표 또는 공백이 PM 뒤에 오는 경우 true를 반환합니다. 이게 어떻게 잘못 됐어?

미리 감사드립니다.

+3

'[PM]가'단일 문자 P''또는'M' –

+0

과 일치 ● - [PHP 워드 프로세서]에 따라 (http://php.net/manual/en/function.preg-match .php), 배열로 컴포넌트를 가져 오기 위해서는 인수로'$ broken_data'를 전달해야합니다. –

+0

감사합니다, Avinash! 그것을 [P] [M]로 변경하면 완벽하게 작동합니다. – zath1164

답변

0

당신은 완전히 preg_match를 건너 뛰고 한 strtotime()와 않는 str_replace() 그러나

를 사용하여, 당신은 휴식이 형식을 사용하면 문자열에 "에서"있을 때, 우리는 않는 str_replace를 제거하는 데 사용하는 이유입니다 수 있습니다 그것.

// converts to "September 6, 1991 6:23PM" 
$time = str_replace(" at ", " ", "September 6, 1991 at 6:23PM"); 
// You will need to change this to the format you want outputted 
echo date("M d, Y H:i" , strtotime($time));