我试图管理我用于XBMC的个人网络服务器上的一些文件,但所有文件(来自YIFY的电影)的名称都是
Jumanji.1995-720p.YIFY.mp4
Silver.Linings.Playbook.2012.1080p.x264.YIFY.mp4
American Hustle(2013)1080p BrRip x264 - YIFY.mp4
请注意,某些项目使用Example
分隔,其他项目使用.
或空格分隔。
所以我需要做的是将_
文件转换为(标题,年份,质量)数组我只知道一些preg_match
基础知识。
但这对我来说很难。
e.g
preg_match
这应该输出=
echo extract('American Hustle (2013) 1080p BrRip x264 - YIFY.mp4');
提前致谢
答案 0 :(得分:5)
^(.*?)\W+(\d{4})(?=[\W ]+?(\d{3,4})p)
你可以尝试一下。参见演示。
https://regex101.com/r/nS2lT4/29
正则表达式启动并捕获从start
到non word letter
的任何内容,可以是一个或多个,并且前面有4 digits
。之后,预测会确保在捕获{{ 1}} \d{4}
可以是一个或多个,并且non word letters
前面有4 digits
。因为超前我们会捕获最后只有p
的数字单词字符和4
后面的字符。
答案 1 :(得分:1)
你有3种不同的格式,那么你需要3种不同的解析类型
试试这个:
$tests = array(
// format 1
"Jumanji.1995-720p.YIFY.mp4",
"Silver.Linings.Playbook.2012-1080p.YIFY.mp4",
"American.Hustle.2013-1080p.YIFY.mp4",
// format 2
"Jumanji.1995.720p.x264.YIFY.mp4",
"Silver.Linings.Playbook.2012.1080p.x264.YIFY.mp4",
"American.Hustle.2013.1080p.x264.YIFY.mp4",
// format 3
"Jumanji (1995) 720p BrRip x264 - YIFY.mp4",
"Silver Linings Playbook (2012) 1080p BrRip x264 - YIFY.mp4",
"American Hustle (2013) 1080p BrRip x264 - YIFY.mp4",
);
function extractInfos($s) {
$infos = array();
if (FALSE === strpos($s, ".YIFY.")) {
// format 3
$tab = explode(" ", $s);
$yearIndex = count($tab) - 6;
$infos["year"] = trim($tab[$yearIndex], "()");
$infos["quality"] = $tab[$yearIndex + 1];
array_splice($tab, $yearIndex);
$infos["title"] = implode(" ", $tab);
} else {
// format 1 or 2
$tab = explode(".", $s);
$yearIndex = count($tab) - 3;
if (FALSE === strpos($tab[$yearIndex], "-")) {
// format 2
$yearIndex -= 2;
$infos["year"] = $tab[$yearIndex];
$infos["quality"] = $tab[$yearIndex + 1];
} else {
// format 1
list($infos["year"], $infos["quality"]) = explode("-", $tab[$yearIndex]);
}
array_splice($tab, $yearIndex);
$infos["title"] = implode(" ", $tab);
}
return $infos;
}
echo "<table border=\"1\">";
foreach ($tests as $s) {
$infos = extractInfos($s);
?>
<tr>
<td>
<?php echo $infos["title"];?>
</td>
<td>
<?php echo $infos["year"];?>
</td>
<td>
<?php echo $infos["quality"];?>
</td>
</tr>
<?php
}
echo "</table>";