我想使用正则表达式:
/(.*)[.\s][sS](\d{1,20})[eE](\d{1,100}).*/i
过滤电视连续剧的标题。 (例如大爆炸理论S04E05)为了删除剧集字符串(S04E05)。
我用http://www.phpliveregex.com/测试了我的正则表达式,一切正常。但是把它包含在我的网站上,我会得到包括剧集字符串在内的整个标题。 preg_match的返回值为0。
我的代码:
$ret=preg_match("/(.*)[.\s][sS](\d{1,20})[eE](\d{1,100}).*/i", $title,$output);
if($ret==1){
$title_without=$output[1];
}
答案 0 :(得分:1)
请注意,在双引号字符串中,您需要使用双反斜杠来转义正则表达式的简写类。
您可以在单引号中的$title= "The Big Bang Theory S04E05";
$ret=preg_replace('/^(.*)[.\s]s\d{1,20}e\d{1,100}(.*)/i', '\1\2', $title);
echo $ret;
函数内使用正则表达式,这样就不必使用双反斜杠了:
The Big Bang Theory
见IDEONE demo。结果:\1\2
。
反向引用/i
将恢复剧集子字符串之前和之后的子字符串。
由于您使用的是[eE]
修饰符,因此无需使用[Ss]
或preg_match
,只需在任何情况下使用单个字母。
要在剧集和剧集子串本身之前返回子字符串,只需使用$title= "The Big Bang Theory S04E05";
$ret=preg_match('/^(.*)[.\s](s\d{1,20}e\d{1,100})/i', $title, $match);
echo $match[1] . PHP_EOL; // => The Big Bang Theory
echo $match[2]; // => S04E05
的捕获组,如下所示:
isActive
请参阅another demo
答案 1 :(得分:0)
你可以寻找单词并匹配除最后一个之外的所有单词:
$matches = array();
$regex = "/^([\w ]*) [\w]+$/i";
$title = "The Big Bang Theory S04E05";
preg_match_all ($regex, $title, $matches);
现在您的所有比赛都在$matches
。