php preg_匹配和正则表达式
我想使用正则表达式:php preg_匹配和正则表达式,php,regex,preg-match,Php,Regex,Preg Match,我想使用正则表达式: /(.*)[.\s][sS](\d{1,20})[eE](\d{1,100}).*/i 筛选电视连续剧的标题。(例如,大爆炸理论S04E05)以删除插曲串(S04E05) 我已经测试了我的正则表达式,一切正常。但包括它到我的网站,我会得到整个标题,包括插曲字符串。 preg_match的返回值为0 我的代码: $ret=preg_match("/(.*)[.\s][sS](\d{1,20})[eE](\d{1,100}).*/i", $title,$output); if
/(.*)[.\s][sS](\d{1,20})[eE](\d{1,100}).*/i
筛选电视连续剧的标题。(例如,大爆炸理论S04E05)以删除插曲串(S04E05)
我已经测试了我的正则表达式,一切正常。但包括它到我的网站,我会得到整个标题,包括插曲字符串。
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\u 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;
看。结果:大爆炸理论
反向引用\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”使用数组的第一个元素是整个字符串。。。你测试过数组的第二个元素吗?是的,我这样做。。。但返回值仍然是0。我相信不会有一致性。是否也可以获得插曲字符串?您的正则表达式的问题在我的答案的开头陈述。您在正则表达式声明中使用了双引号,因此,类\s
的反斜杠必须加倍。使用单引号时,不必将反斜杠作为\
的双反斜杠,然后将其视为文字反斜杠。此外,我建议使用捕获组,以便我们可以访问我们感兴趣的详细信息。欢迎您。此外,如果您不关心s
或e
后面有多少位数字,您可以使用\d+
,不需要限制量词\d{min,max}
。