PHP - preg_match?
-
19-09-2019 - |
Вопрос
Я не очень хорош в выражениях...Я просмотрел несколько онлайн-руководств, но все еще не понимаю.По сути, я пытаюсь вернуть TRUE
если строка отформатирована следующим образом:
4 цифры + пробел + 2 цифры и преобразуйте их в дату.
Таким образом, строка будет выглядеть следующим образом: 2010 02
, и я пытаюсь вывести February, 2010
.
Я пытаюсь использовать preg_match
, но я продолжаю получать
{ не является модификатором...
Редактировать
Согласно первым 2 ответам, я изменил его, но получаю фатальную ошибку в первом и ту же ошибку неизвестного модификатора во втором:
if(preg_match('/([0-9{4}]) ([0-9]{2})/iU',$path_part)) {
$path_title = date("F, Y",strtotime(str_replace(" ","-", $path_title)));
}
Кроме того, просто попробовал более подробную версию в первом ответе, и хотя ошибка исчезает, это не изменяет результат...
$path_part = '2010 02';
if(preg_match('/^(\d{4}) (\d{2})$/',$path_part,$matches)) {
$path_title = $mon[(int)$matches[2]] . " " . $matches[1]; // prints Feb 2010
}
Решение
Я пытаюсь вернуть TRUE, если строка отформатирована следующим образом:4 цифры + пробел + 2 цифры
return preg_match(/^\d{4} \d{2}$/,$input);
Чтобы преобразовать в дату, вы можете попробовать что-то вроде:
$mon = array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$date_str = "2010 02";
if(preg_match('/^(\d{4}) (\d{2})$/',$date_str,$matches))
{
print $mon[(int)$matches[2]] . " " . $matches[1]; // prints Feb 2010
}
Другие советы
Попробуй вот это...
preg_match('/([0-9{4}]) ([0-9]{2})/iU', $input);
Не имея никаких подробностей относительно вашего фактического кода, должно сработать следующее:
<?php
$str = '2010 02';
$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
if(preg_match('/([0-9]{4}) ([0-9]{2})/', $str, $match) == 1){
$year = $match[1];
$month = (int) $match[2];
echo $months[$month - 1] . ', ' . $year;
}else{
//Error...
}
?>
$in = "2010 02";
if(preg_match('/([0-9]{4}) ([0-9]{2})/i', $in, $matches)) {
echo date("F Y", strtotime($matches[2] . "/1/" . $matches[1]));
}
Вы также можете использовать T-Regx (T-Regx) библиотека
$string = '2010 02';
pattern('\d{4} \d{2}')->match($string)->first(function (Match $match)
{
$year = $match->group(1);
$month = $match->group(2);
});