PHP Regex除了文件名中的日期之外的所有内容

时间:2012-09-24 14:28:03

标签: php regex date preg-replace

我有一个带有日期的文件名,日期总是在文件名的末尾。 并且没有扩展名(因为我使用了basename函数)。

我有什么:

$file = '../file_2012-01-02.txt';
$file = basename('$file', '.txt');
$date = preg_replace('PATTERN', '', $file);

我真的不擅长正则表达式,所以有人可以帮助我从文件名中获取日期。

由于

5 个答案:

答案 0 :(得分:1)

我建议使用preg_match而不是preg_replace:

$file = '../file_2012-01-02';
preg_match("/.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*/", $file, $matches);
echo $matches[1]; // contains '2012-01-02'

答案 1 :(得分:0)

我建议你试试:

$exploded = explode("_", $filename);
echo $exploded[1] . '<br />'; //prints out 2012-01-02.txt
$exploded_again = explode(".", $exploded[1]);
echo $exploded_again[0]; //prints out 2012-01-02

缩短它:

$exploded = explode( "_" , str_replace( ".txt", "", $filename ) );
echo $exploded[1];

答案 2 :(得分:0)

如果在日期之前总是有下划线:

ltrim(strrchr($file, '_'), '_');
      ^^^^^^^ get the last underscore of the string and the rest of the string after it
^^^^^ remove the underscore

答案 3 :(得分:0)

有了这个,请在​​需要时使用regexp:

current(explode('.', end(explode('_', $filename))));

答案 4 :(得分:0)

这应该有助于我思考:

<?php

$file = '../file_2012-01-02.txt';
$file = basename("$file", '.txt');
$date = preg_replace('/(\d{4})-(\d{2})-(\d{2})$/', '', $file);

echo $date; // will output: file_

?>