php preg_match 및 regex를 사용하여 문자열에서 날짜를 폭발시키는 방법

StackOverflow https://stackoverflow.com/questions/1628186

  •  06-07-2019
  •  | 
  •  

문제

나는 어딘가에 날짜를 가지고 문자열을 처리하고 있습니다. 이 문자열에는 날짜가 나타날 수있는 방법이 다릅니다.

"… 01.11.2009 18 : 00-21 : 00…"또는 "… 01.11.2009 18 : 00-02.11.2009 15:00…"또는 "… 01.11.2009 18:00…

날짜가 어떻게 나타나는지에 관계없이 시작 날짜 "01.11.2009 18:00"만 있으면됩니다. 두 개의 경기가 있으면 첫 번째 경기 일뿐입니다. PHP의 전체 문자열에서 이것을 분리/폭발하려면 어떻게해야합니까? 아이디어가 있습니까?

Regex로 패턴을 만들어 preg_match와 일치시켜야한다고 생각합니다. 이것이 길입니까? 불행히도 나는 Regex에 크게 많이 들어 가지 않습니다. 누구든지 임의의 문자열에서 내 단일 날짜 블록을 얻는 데 도움을 줄 수 있습니까?

도움이 되었습니까?

해결책

$matches = array();
$desired_date = '';
preg_match('/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/', $string_containing_dates, $matches);
if (isset($matches[0])) $desired_date = $matches[0];

다른 팁

노력하다:

$s = "… 01.11.2009 18:00-21:00 …… 01.11.2009 18:00-02.11.2009 15:00 …… 01.11.2009 18:00 …";
preg_match_all('!(\d{2}\.\d{2}\.\d{4}) \d{2}:\d{2}(-\d{2}:\d{2}|-\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})?!', $s, $matches);
print_r($matches[1]);

날짜가 다음 방식으로 형식화되면 항상 각 날짜마다 동일한 수의 문자가 있습니다. 그런 다음 간단한 substr ()를 사용하여 시작 X chars를 가져갈 수 있습니다.

// example date strings
$date = date('m.d.Y h:i:S');
$date2 = date('m.d.Y h:i:S', strtotime('+50 days'));
$date_str = $date . '-' . $date2;

// get the first 10 characters for the date
$match = substr($date_str, 0, 10);

이거 한번 해봐:

preg_match_all(
    '/([0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2})' // linebreak added
    . '(?:-(?:[0-9]{2}\.[0-9]{2}\.[0-9]{4} )?(?:[0-9]{2}:[0-9]{2})?)?/',
    '" 01.11.2009 18:00-21:00 " or " 01.12.2009 18:00-02.12.2009 15:00 " '
    . 'or " 01.01.2009 18:00 "',
    $matches
);

print_r($matches[1]);
// "01.11.2009", "01.12.2009", "01.01.2009"

아래 기능을 사용하여 해당 형식의 첫 번째 날짜를 추출 할 수 있습니다.

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top