我有一个像这样的文件名
1x5 Girl In The Flower Dress.mkv
这意味着Season 1 Episode 5
In The Flower Dress
2x6.English,.Fitz.or.Percy.avi
这意味着Season 2 Episode 6
English, Fitz or Percy
如何提取季节编号,剧集编号和系列名称
答案 0 :(得分:2)
输入
&#XA;&#XA;<代码> 2x6.English,.Fitz.or.Percy.avi&#XA; 代码>&#XA;& #xA;
试试这个:
&#xA;&#xA; preg_match(“/(\ d *)x(\ d *)。?(。*)\。 (。*)/“,$ input,$ output_array);&#xA;
&#xA;&#xA; output_array
&#xA;&#xA; array(&#xA; 0 =&gt; 2x6.English,.Fitz.or.Percy.avi&#xA; 1 =&gt; 2 // Season&#xA; 2 =&gt; 6 //剧集&#xA; 3 =&gt;英文,.Fitz.or.Percy // title&#xA; 4 =&gt; avi&#xA;)&#xA;
&#xA;
答案 1 :(得分:1)
更直接的解决方案怎么样?
$title = '2x6.English,.Fitz.or.Percy.avi';
preg_match_all('~(?:(\d+)x(\d+)|(?!^)\G)[^\w\r\n,-]*\K[\w,-]++(?!$)~m', $title, $matches);
$matches = array_map('array_filter', $matches);
echo "Season {$matches[1][0]} Episode {$matches[2][0]} of ".implode(' ', $matches[0]);
输出:
Season 2 Episode 6 of English, Fitz or Percy
答案 2 :(得分:1)
首先,我想写:$out=preg_split('/[\. x]/',$in,3,PREG_SPLIT_NO_EMPTY);
但是因为标题词可以用点分隔而你不想捕获文件后缀,所以我不得不把这个方法加入。
Barmar的方法包括文件后缀,因此需要额外处理。 Ravi的模式并不像它那样精致。
Revo的方法受到启发,但需要的步数是我模式的4倍。 Regex Demo我们的两种方法都需要额外的函数调用来准备标题。我发现我的方法非常直接,不需要任何数组过滤。
$input[]='1x5 Girl In The Flower Dress.mkv';
$input[]='2x6.English,.Fitz.or.Percy.avi';
foreach($input as $in){
preg_match('/(\d+)x(\d+)[ \.](.+)\..+/',$in,$out);
echo "<div>";
echo "Season $out[1] Episode $out[2] of ",str_replace('.',' ',$out[3]);
echo "</div>";
}
输出:
Season 1 Episode 5 of Girl In The Flower Dress
Season 2 Episode 6 of English, Fitz or Percy
答案 3 :(得分:0)
使用捕获组获取与模式部分匹配的字符串部分。
preg_match('/(\d+)x(\d+)\s*(.*)/', '1x5 Girl In The Flower Dress.mkv', $match);
$match[1]
将为'1'
,$match[2]
将为'5'
,$match[3]
将为'Girl in the Flower Dress.mov'
。
您需要使用\d+
来匹配季节或剧集编号中的多个数字。