Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从简单正则表达式中排除几个单词_Php_Regex - Fatal编程技术网

在PHP中从简单正则表达式中排除几个单词

在PHP中从简单正则表达式中排除几个单词,php,regex,Php,Regex,我正在对驱动器上的几个文件夹进行分类,我想使用这个正则表达式剔除低质量的文件(这很有效): 现在一些文件名的定义很高,但它们的文件名中仍然有DVD或XviD,但也有1080p、720p、1080i或720i。我需要一个正则表达式来匹配上面的一个,但不包括这些单词1080p、720p、1080i或720i。使用两个正则表达式 一个用来确定它是否匹配 1080p|720p|1080i|720i 然后,如果它不,则没有找到与上述内容匹配的内容,请检查是否匹配: xvid|divx|480p|320p

我正在对驱动器上的几个文件夹进行分类,我想使用这个正则表达式剔除低质量的文件(这很有效):

现在一些文件名的定义很高,但它们的文件名中仍然有DVD或XviD,但也有1080p、720p、1080i或720i。我需要一个正则表达式来匹配上面的一个,但不包括这些单词1080p、720p、1080i或720i。

使用两个正则表达式

一个用来确定它是否匹配

1080p|720p|1080i|720i
然后,如果它,则没有找到与上述内容匹配的内容,请检查是否匹配:

xvid|divx|480p|320p|DivX|XviD|DIVX|XVID|XViD|DiVX|DVDSCR|PDTV|pdtv|DVDRip|dvdrip|DVDRIP
正则表达式不支持反向匹配,可以使用负环视,但对于这项任务,我不认为它们是合适的。当您检查
1080p divx
的所有情况时,您会进行负面展望,但是它不会捕获
divx-10bit-1080p
,您无法在简单的正则表达式中实现这一点。

您可以使用


这将匹配您的搜索字符串,但如果字符串中还有
1080p | 720p | 1080i | 720i
,则会失败。

您可以这样做:


我不明白你到底有什么问题。你能举个例子吗?太棒了。我会测试它的!谢谢。很遗憾,我不能用两个正则表达式。
xvid|divx|480p|320p|DivX|XviD|DIVX|XVID|XViD|DiVX|DVDSCR|PDTV|pdtv|DVDRip|dvdrip|DVDRIP
^(?!.*(?:1080p|720p|1080i|720i)).*(?:xvid|divx|480p|320p|DivX|XviD|DIVX|XVID|XViD|DiVX|DVDSCR|PDTV|pdtv|DVDRip|dvdrip|DVDRIP)
<pre><?php
$subjects = array('Arrival of the train at La Ciotat station.avi',
                  'Gardenator II - multi - DVDrip - 720i.mkv',
                  'The adventures of Roberto the bear - divx.avi',
                  'Tokyo’s Ginza District - dvdrip.mkv');

$pattern = '~(?(DEFINE)(?<excl>(?>d(?>vd(?>rip|scr)|ivx)|pdtv|xvid|320p|480p)))
             (?(DEFINE)(?<keep>(?>[^17]+?|1(?!080[ip])|7(?!20[ip]))))
             ^\g<keep>*\g<excl>\g<keep>*$  ~ix';

foreach($subjects as $subject) {
    if (preg_match($pattern, $subject)) echo $subject."\n"; }