2016-10-07 9 views
2

この文字列の日付と時刻を取り除く必要があります:some_report_20161005_1530.xml私はそれをより多くの作業に対応できるように再フォーマットできます。日付と時刻は、ファイルへのファイルから変更されますが、常にこの形式のままになります:some_report_{year}{month}{day}_{24hr time}.xml文字列から区切られていない日付と時刻を取り出す方法

$test = 'some_report_20161005_1530.xml'; 
preg_match('(\d{4})(\d{2})(\d{2})_(\d{4})', $test, $test_matches); 
print_r($test_matches); 

これを実現するための最良の方法だろうか?

preg_match("/(\d{8})_(\d{4})/", $filename, $matches); 

array_shift($matches); 
list($date, $time) = $matches; 

ワーキング:簡単な正規表現のアプローチは8と4桁の数字を引き出すことであろう

(。これらの関数の私の無知や誤用を許し、私は決して専門家で午前)

答えて

3

some_reportは数字が含まれていない場合は、日付と時刻の部分は、DateTimeのコンストラクタで動作するように良いために既にあるので、あなたは、単純な正規表現でそれらを抽出することができます。

$date_time = new DateTime(preg_replace("/[^0-9]/", "", $your_string)); 
+1

追加 '1530'数字は時間と分として扱われている、意図しない副作用を持つことができます。 – jszobody

+1

ああ、私は彼らが時間と分になると思った? –

+1

あなたはそうです。私は質問を間違えた、彼は日付がほしいと思った。その場合、これを行うには滑らかな方法です。 =) – jszobody

2

ワン例:https://3v4l.org/npGC8

それとも、単にexplodeを使用して正規表現をスキップすることができます:

list($name1, $name2, $date, $time) = explode("_", str_replace(".","_", $filename)); 

の作業例:https://3v4l.org/lAvTN

はその後、それはあなたが欲しいしかし、あなたが操作できるように、DateTimeにそれを渡すか、フォーマットと同じくらい簡単です。

$dt = new DateTime($date . $time); 

echo $dt->format('n/j/y h:ia'); // 10/5/16 03:30pm 
-1
$test = 'some_report_20161005_1530.xml'; 

echo preg_replace('#(\d{4})(\d{2})(\d{2})(_)(\d{2})(\d{2})#', 
        '${1}-${2}-${3}_${5}:${6}', $test) , '<br/>'; 

preg_match(
'#(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})(_)(?<hour>\d{2})(?<minute>\d{2})#', 
$test,$test_matches); 

print_r($test_matches); 

だけの例...

関連する問題