PHP正则表达式
我想捕获路径中没有年份的最后一个文件夹。对于这个字符串路径,我只需要“Millers Crossing”而不是“Movies\Millers Crossing”,这是我当前正则表达式捕获的 G:\Movies\Millers Crossing[1990]PHP正则表达式,php,regex,Php,Regex,我想捕获路径中没有年份的最后一个文件夹。对于这个字符串路径,我只需要“Millers Crossing”而不是“Movies\Millers Crossing”,这是我当前正则表达式捕获的 G:\Movies\Millers Crossing[1990] preg_match('/\\\\(.*)\[\d{4}\]$/i', $this->parentDirPath, $title); 试一试 基本上,您不是将任何字符与匹配,而是将任何字符与\匹配,而不是复杂的表达式如何 $title
preg_match('/\\\\(.*)\[\d{4}\]$/i', $this->parentDirPath, $title);
试一试
基本上,您不是将任何字符与
匹配,而是将任何字符与\
匹配,而不是复杂的表达式如何
$title = substr(basename($this->parentDirPath), 0, -6);
这假设字符串末尾总是有一年,格式为[xxxx]
(它也在*nix上工作;)
更新:您仍然可以使用basename
获取文件夹,然后应用正则表达式:
$folder = basename($this->parentDirPath);
preg_match('#^(.*?)(?:\[\d{4}\])?$#', $str, $match);
$title = $match[1];
看起来你想要这样的东西:
/([^\\])+\s\[\d{4}\]$/
至少我会这么做。应该只包括字符串中最后一个反斜杠之后的内容,并且电影标题将位于第一个捕获组中。更简单的方法:
([^\\]*)\s?\[\d{4}\]$
我相信您的问题还在于包括“双反斜杠”(例如,
\\\\\\
而不是单个\\\\
。您还可以使用类来包含您不想要的字符,方法是在其前面加上插入符号(^
).@aLk:那么你打算如何使用你的表达式呢?只有在这样的一年里,它才会匹配。最终它看起来会是这样的([\d{4}]$)|(dvdrip$)|(…$),因为现在我只是想知道如何用正则表达式跳过前面的前几个斜杠,但看起来我应该先用basename,然后用正则表达式。
([^\\]*)\s?\[\d{4}\]$