Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php preg_匹配和正则表达式_Php_Regex_Preg Match - Fatal编程技术网

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}