字符串:
Destiny 2 12_9_2017 8_08_31 PM.mp4
所有这些字符串将有5个部分。
当游戏变化很大时(标题中的各种长度,空格,冒号和连字符),我将如何正则表达式获取日期和时间(单独地,2个单独的函数)。
例如,它必须与所有这些字符串一起使用。
Destiny 2 12_9_2017 8_08_31 PM.mp4
Assassin's Creed: Origins 12_9_2017 8_08_31 PM.mp4
Ori and the Blind Forest - Definitive Edition 12_9_2017 8_08_31 PM.mp4
无论游戏如何,都可以从该字符串中获取日期(不填充0)。
我将定义以下功能:
function getGameDate($input) {
preg_match('/(\d+_\d+_\d{4})\s+\d+_\d+_\d+/', $input, $re);
return $re[1];
}
function getGameTime($input) {
preg_match('/\d+_\d+_\d{4}\s+([^.]*)/', $input, $re);
return $re[1];
}
print(getGameDate("Destiny 2 12_9_2017 8_08_31 PM.mp4") . "\n");
print(getGameTime("Destiny 2 12_9_2017 8_08_31 PM.mp4") . "\n");
print(getGameDate("Assassin's Creed: Origins 12_9_2017 8_08_31 PM.mp4") . "\n");
print(getGameTime("Assassin's Creed: Origins 12_9_2017 8_08_31 PM.mp4") . "\n");
print(getGameDate("Ori and the Blind Forest - Definitive Edition 12_9_2017 8_08_31 PM.mp4"));
print(getGameTime("Ori and the Blind Forest - Definitive Edition 12_9_2017 8_08_31 PM.mp4"));
没有什么神奇的事情发生在这里,除了你会发现我匹配日期和时间,然后只捕获前者。这是故意的,因为日期和时间都有由下划线分隔的3个数字的一般模式。我们需要确保我们捕获正确的一个,所以通过包括我们覆盖这个边缘情况。
你可以尝试这种模式
$str = 'Destiny 2 12_9_2017 8_08_31 PM.mp4';
preg_match('/\d+\S+ \d+\S+ [A|P]M/', $str, $date_time);
echo $date_time[0];
// Or with this '/((\d+\S+){3}\s){2}[A|P]M/'