这不是 100% 的正则表达式解决方案,但我认为它是您将获得的最优雅的解决方案。
基本上,您想要捕获(anything)
或[anything]
,它可以表示为\(.*\)|\[.*\]
。然后,将其设为捕获组,并对其进行双重转义,以获得(\\(.*\\)|\\[.*\\])
.
不幸的是,这也捕获了()
or []
,因此您必须剥离它们;我只是用来substr($matches[3], 1, -1)
做这项工作:
$mp3 = "Jimmy Cross - I Want My Baby Back (Remix).mp3";
preg_match('/^(.*) - (.*) (\\(.*\\)|\\[.*\\])\.mp3$/', $mp3, $matches);
$artist = $matches[1];
$title = $matches[2];
$mix = substr($matches[3], 1, -1);
echo "File: $mp3" . "<br/>" . "Artist: $artist" . "<br/>" . "Title: $title" . "<br />" . "Mix: $mix" . "<br />";
打印出来:
文件:Jimmy Cross - I Want My Baby Back (Remix).mp3
艺术家:Jimmy Cross
标题:I Want My Baby Back
Mix:Remix