PHP的preg_match和正则表达式的正则表达式
问题描述:
我想用正则表达式:PHP的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];
}
答
注意,双引号字符串中,你需要使用双反斜线逃脱正则表达式速记班。
您可以使用您正则表达式一个preg_replace
函数内内单引号,这样你就不必使用双反斜杠:
$title= "The Big Bang Theory S04E05";
$ret=preg_replace('/^(.*)[.\s]s\d{1,20}e\d{1,100}(.*)/i', '\1\2', $title);
echo $ret;
见IDEONE demo。结果:The Big Bang Theory
。
反向引用\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
答
你可以查找单词和匹配所有,但最后一个:
$matches = array();
$regex = "/^([\w ]*) [\w]+$/i";
$title = "The Big Bang Theory S04E05";
preg_match_all ($regex, $title, $matches);
现在你所有的比赛都在$matches
。
然后显示'$ title'中的内容。如果我们无法看到您输入的内容,我们无法帮助您修复正则表达式。 –
我认为是这样的:(例如,大爆炸理论S04E05) –
$ title =“大爆炸理论S04E24” – PM84