繁体   English   中英

我们如何使用正则表达式从文件名检查电影是否为3d

[英]How we check movie is 3d or not from filename using regex

我的文件夹中有某些文件

PARANORMAN_3D_hsbs_.mkv      
RunAllNight_Filmbank.mkv         
SHUTTER_ISLAND_airwave.mkv
THE_CHANGE_UP_airwave.mkv
The_Avenger_3D_Trailer1.mkv
moviename (year).3d.hsbs.mkv
moviename 3d sbs.mkv
moviename.3D-HTAB.mkv
moviename-3D.sbs-720p.mkv
jurassic_world_airwave_3D_hsb.mkv

根据科迪论坛http://forum.kodi.tv/showthread.php?tid=173385

文件名中的以下任何术语应触发3D检测:

3DTAB,3D.TAB,HTAB,3DSBS,3D.SBS,HSBS

我尝试什么

 <?php
    $pattern="(7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS|)";
    $file_name="PARANORMAN_3D_hsbs_.mkv";
    if (preg_match($pattern, $file_name)) {
        echo "A match was found.";
    } else {
        echo "A match was not found.";
    }

如果文件名是PARANORMAN_3D_hsbs_ true但是如果文件名PARANORMAN3Dhsbs我希望为false 我的代码在任何情况下都使我成真

我们如何在我的文件名中检查这些内容

您已经有了要匹配的不同单词的替代形式:

(7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS)

然后,您在不想与单词匹配的注释中写东西。 您也以这种方式命名,它必须跟在一个特殊字符之后,但是您不能清楚地说出什么都是特殊字符。

在这种情况下,使用正则表达式的一种很好的工作方法是利用Word Boundaries ,它是写为\\b的特殊锚点。 您可以将其放在更改之前:

(\b(7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS))
 ^^^                                                         ^

您也可以使交替不捕获,因为您不需要捕获它(另请参见子模式以了解内部括号):

(\b(?:7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS))
    ^^

您可能想忽略大小写

(\b(?:7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS))i
                                                                 ^

如果锚点在您的情况下不起作用,则可以将其替换为与任何特殊字符匹配的正则表达式,例如,使用字符类:

([_-](?:7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS))i

这将仅允许在下划线或破折号之后,并且不再允许文件名开头的任何替换单词(在您的情况下甚至可能需要)。

或与您的角色类别:

([._ ~,](?:7F7|3DSBS|3D.SBS|HSBS|H.SBS|H-SBS| SBS |FULL-SBS|FULL.SBS))i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM