php preg_match 및 regex를 사용하여 문자열에서 날짜를 폭발시키는 방법
-
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];
}
제휴하지 않습니다 StackOverflow