PHP - preg_match?
-
19-09-2019 - |
Domanda
Non sono molto bravo con le espressioni ... Ho guardato alcuni tutorial online, ma non sto ancora ottenerlo. Fondamentalmente, io sto cercando di tornare TRUE
se una stringa viene formattata in questo modo:
4 cifre + spazio + 2 cifre e convertirlo in una data.
Quindi, la stringa sarà simile: 2010 02
, e sto cercando di February, 2010
uscita.
Sto cercando di usare preg_match
, ma continuo a ricevere
{non è un modificatore di ...
Modifica
Per i primi 2 risposte, l'ho cambiato, ma sto ottenendo un errore fatale al primo e lo stesso errore modificatore di sconosciuto al secondo:
if(preg_match('/([0-9{4}]) ([0-9]{2})/iU',$path_part)) {
$path_title = date("F, Y",strtotime(str_replace(" ","-", $path_title)));
}
Inoltre, appena provato la versione più approfondita nella prima risposta, e mentre l'errore va via, ma non cambia l'uscita ...
$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
}
Soluzione
sto cercando di restituire TRUE se una stringa viene formattata in questo modo: 4 cifre + spazio + 2 cifre
return preg_match(/^\d{4} \d{2}$/,$input);
Per convertire ad oggi si può provare qualcosa di simile:
$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
}
Altri suggerimenti
Prova questo ...
preg_match('/([0-9{4}]) ([0-9]{2})/iU', $input);
Senza avere alcun dettaglio per il codice vero e proprio, il seguente dovrebbe funzionare:
<?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]));
}
È inoltre possibile utilizzare T-Regx biblioteca
$string = '2010 02';
pattern('\d{4} \d{2}')->match($string)->first(function (Match $match)
{
$year = $match->group(1);
$month = $match->group(2);
});