php preg_match和正则表达式正则表达式

时间:2015-11-02 14:10:46

标签: php regex preg-match

我想使用正则表达式:

/(.*)[.\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];
}

2 个答案:

答案 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