Question

Je ne suis pas très bon avec des expressions ... Je l'ai regardé quelques tutoriels en ligne, mais je ne suis toujours pas l'obtenir. En fait, je suis en train de revenir TRUE si une chaîne est formatée comme ceci:

4 chiffres + espace + 2 chiffres et le convertir à une date.

Ainsi, la chaîne ressemblera: 2010 02, et je suis en train de February, 2010 de sortie.

Je suis en train d'utiliser preg_match, mais je continue à obtenir

  

{n'est pas un modificateur ...

EDIT

Par les 2 premières réponses, je l'ai changé, mais je reçois une erreur fatale sur la première et la même erreur de modification inconnue sur le second:

if(preg_match('/([0-9{4}]) ([0-9]{2})/iU',$path_part)) {
    $path_title = date("F, Y",strtotime(str_replace(" ","-", $path_title)));
}

En outre, juste essayé plus en profondeur la version dans la première réponse, et alors que l'erreur disparaît, il ne change pas la sortie ...

$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
}
Était-ce utile?

La solution

Je suis en train de retourner TRUE si une chaîne est formatée comme ceci: 4 chiffres + espace + 2 chiffres

return preg_match(/^\d{4} \d{2}$/,$input);

Pour convertir à ce jour, vous pouvez essayer quelque chose comme:

$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
}

Autres conseils

Essayez celui-ci ...

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

Sans avoir tous les détails à votre code actuel, ce qui suit devrait fonctionner:

<?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]));
}

Vous pouvez également utiliser T-REGX bibliothèque

$string = '2010 02';

pattern('\d{4} \d{2}')->match($string)->first(function (Match $match) 
{
    $year = $match->group(1);
    $month = $match->group(2);
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top