我正在尝试创建存储在我的NAS上的电影和电视季节的电影数据库。但是文件的名称是这样的:
我试图在许多网站上搜索这些字符串,例如TMDB.org,但他们找不到像这样的电影。是否有可能从这些字符串中获得TMDB友好的电影(或季节)名称?我试图用空格替换点,但它没有帮助。有什么想法吗?
我认为以下步骤可行,但我不熟悉正则表达式:
我担心没有年份或年份的文件是在质量之后(1080p,...)或者在上传者的昵称之后。
答案 0 :(得分:3)
这些名称是自由格式的,但都具有相同的元素,如'name','year','codec','quality','resolution'等...所以你可以创建那些元素的列表并将它们过滤掉。
目标是获得最大可读的电影名称
我从未在php上写过一些东西,所以我首先在Perl上创建脚本,然后将其翻译成php,因为我可以......所以原谅我一些毛茸茸的PHP代码
$arr = array(
'The.Walking.Dead.S04E01.HDTV.x264-ASAP',
'R.I.P.D.2013.HDRip.x264.AC3-FooKas',
'the.perks.of.being.a.wallflower.2012.1080p.bluray.x264-sparks'
);
foreach($arr as $value) {
$words = preg_split('/[.]/', $value);
$words = array_filter($words, create_function('$var','return !(preg_match("/(?:HDTV|bluray|\w{2,3}rip)|(?:x264)|(?:\d{4})|(?:\d{3,4}p)|(?:AC\d)/i", $var));'));
echo join(' ', $words);
echo "\n";
}
输出将是:
The Walking Dead S04E01
R I P D
the perks of being a wallflower
这是非常接近的...如果我的代码出现问题是Perl的代码,我确定它有效:
my @data = (
'The.Walking.Dead.S04E01.HDTV.x264-ASAP',
'R.I.P.D.2013.HDRip.x264.AC3-FooKas',
'the.perks.of.being.a.wallflower.2012.1080p.bluray.x264-sparks'
);
for my $el ( @data ) {
my @words = grep
{!/(?:HDTV|bluray|\w{2,3}rip)|(?:x264)|(?:\d{4})|(?:\d{3,4}p)|(?:AC\d)/i}
split /[.]/, $el;
print join ' ', @words, "\n";
}
答案 1 :(得分:0)
这至少应该让你开始。我确信有更好的方法可以做到这一点,我相信你会找到需要调整以适应所有场景的地方。
$subject = "the.perks.of.being.a.wallflower.2012.1080p.bluray.x264-sparks";
$pattern = '/[a-zA-Z0-9\.]+\.[0-9]{4}\./';
preg_match($pattern, $subject, $matches);
echo substr(str_replace('.', ' ', $matches[0]), 0, -6);