PHP - preg_match? - PullRequest
       34

PHP - preg_match?

1 голос
/ 07 февраля 2010

Я не очень хорошо разбираюсь в выражениях ... Я просмотрел некоторые онлайн-уроки, но все еще не понимаю. По сути, я пытаюсь вернуть TRUE, если строка отформатирована так:

4 цифры + пробел + 2 цифры и преобразовать их в дату.

Итак, строка будет выглядеть так: 2010 02, и я пытаюсь вывести February, 2010.

Я пытаюсь использовать preg_match, но продолжаю получать

{не является модификатором ...

EDIT

За первые 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
}

Ответы [ 5 ]

3 голосов
/ 07 февраля 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
}
0 голосов
/ 18 декабря 2018

Вы также можете использовать T-Regx library

$string = '2010 02';

pattern('\d{4} \d{2}')->match($string)->first(function (Match $match) 
{
    $year = $match->group(1);
    $month = $match->group(2);
});
0 голосов
/ 07 февраля 2010
$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]));
}
0 голосов
/ 07 февраля 2010

Не имея подробной информации о вашем фактическом коде, должно работать следующее:

<?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...
}

?>
0 голосов
/ 07 февраля 2010

Попробуйте это ...

preg_match('/([0-9{4}]) ([0-9]{2})/iU', $input);
...