2015-02-06 8 views
0

8 개 정수의 모든 시퀀스를 얻기 위해이 코드에서 8 문자 정수 문자열을 추출하는 것은 잘 작동 : 경기가 20는 iCal 파일

로 시작하면 내가에만 관심이 그러나

preg_match_all('/[0-9]{8}/', $string, $match);

나는 ^20을 어딘가에 추가해야한다는 것을 알고 있지만, 나는 아무런 성공없이 여러 번 시도했다. 많은 정규식 자습서를 살펴 보았지만 두 가지 검색 방법을 설명하는 것은 아닙니다.

실제로 ICAL 파일을 구문 분석하여 날짜를 추출하려고합니다. 8 자리 정수가 20으로 시작하면 거의 확실하게 날짜입니다. 예를 들어

: DTSTART:20150112T120000Z

+0

'(? = 20) (\ d {8})'을 사용해 보셨습니까? – MacMac

답변

0

방법이 솔루션에 대해 :

(?=20)(\d{8}) 

그것은 긍정적 예측 그룹을 캡처하는 않습니다

/(20)\d{6}/ 
+1

나는 (20 \ d {6})/20 대신에 전체 경기를 얻으려고했다. – Wieczo

0

이 아마 당신이 찾고있는 것을 발견 할 것이다 8 자리 숫자와 함께 20으로 시작하는 경우

0

답변은 당신이 달성하기를 원하는 것에 따라 달라집니다. icalendar 파일에서 모든 날짜를 추출 하시겠습니까? 그렇다면 19xx로 시작하는 연도가 가장 많으므로 생일 날짜가 누락되었을 수 있습니다.

또한

당신이 이벤트가 시작 날짜 추출 할 귀하의 예제에서 가정, ... UNTIL, TRIGGER, DTEND처럼 가장 가능성이 많은 원치 않는 날짜를 얻을 것입니다 어떤 날짜와 일치하는, 당신이 시도 할 수 :

DTSTART[a-zA-Z._%+-/=;]*:(\d){8}[T]?[\d]{6} 

을 염두에 두어야합니다 : DTSTART를 다음을 DATE 또는 DATE-TIME이 (참조 TZID=America/New_York 및/또는 타입 정의와 같은 시간대 정의 할 수 있습니다 RFC5545 DATE-TIME

+0

답변 해 주셔서 감사합니다. 첫 번째 2 개의 답변은 내 필요에 완벽합니다. 왜냐하면 나는 미래에만 관심이 있기 때문입니다. 이것은 I 만든 함수 함수 extract_numbers ($ 문자열) { 으로, preg_match_all ('/ (201 \ D {5}) /'$ 문자열 $ 일치하는); // 201부터 5 개의 정수로 시작하는 숫자 찾기 return $ match [0]; } –