PHP正则表达式

PHP正则表达式,php,regex,Php,Regex,我想捕获路径中没有年份的最后一个文件夹。对于这个字符串路径,我只需要“Millers Crossing”而不是“Movies\Millers Crossing”,这是我当前正则表达式捕获的 G:\Movies\Millers Crossing[1990] preg_match('/\\\\(.*)\[\d{4}\]$/i', $this->parentDirPath, $title); 试一试 基本上,您不是将任何字符与匹配,而是将任何字符与\匹配,而不是复杂的表达式如何 $title

我想捕获路径中没有年份的最后一个文件夹。对于这个字符串路径,我只需要“Millers Crossing”而不是“Movies\Millers Crossing”,这是我当前正则表达式捕获的

G:\Movies\Millers Crossing[1990]

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}\]$