如何用PHP逐步截断字符串直至获得API匹配结果?
字符串逐步截断匹配API实现方案
需要对指定字符串进行逐步截断处理:从完整字符串开始,依次移除末尾以.或-分隔的部分,直到得到可匹配API的字符串。使用preg_split尝试实现该逻辑未达预期,以下是需求示例及尝试代码:
需求示例
Sinn.und.Sinnlichkeit.1995.German.DL.1080p.BluRay.x264-RSG <--- 原始字符串 Sinn.und.Sinnlichkeit.1995.German.DL.1080p.BluRay.x264 <--- 不匹配 Sinn.und.Sinnlichkeit.1995.German.DL.1080p.BluRay <--- 不匹配 Sinn.und.Sinnlichkeit.1995.German.DL.1080p <--- 不匹配 Sinn.und.Sinnlichkeit.1995.German.DL <--- 不匹配 Sinn.und.Sinnlichkeit.1995.German <--- 不匹配 Sinn.und.Sinnlichkeit.1995 <--- 不匹配 Sinn.und.Sinnlichkeit <--- 匹配 Sinn.und <--- 不匹配 Sinn <--- 不匹配
尝试代码
$string = 'Sinn.und.Sinnlichkeit.1995.German.DL.1080p.BluRay.x264-RSG'; $split = preg_split('/[.-]/', $string); foreach( $split AS $explode ) { echo $explode; }
问题分析与解决方案
preg_split会直接将所有.和-作为分隔符拆分字符串,得到的是独立片段,无法还原出逐步截断的完整字符串,因此不符合需求。正确的思路是每次从末尾截断最后一个分隔符后的部分,循环检查是否匹配API:
实现代码
$string = 'Sinn.und.Sinnlichkeit.1995.German.DL.1080p.BluRay.x264-RSG'; $currentStr = $string; // 替换为你的实际API匹配逻辑 function isMatchApi($str) { return $str === 'Sinn.und.Sinnlichkeit'; } do { // 检查当前字符串是否匹配API if (isMatchApi($currentStr)) { echo "匹配成功:{$currentStr}\n"; break; } // 找到最后一个.或-的位置 $lastDotPos = strrpos($currentStr, '.'); $lastDashPos = strrpos($currentStr, '-'); $lastSeparatorPos = max($lastDotPos, $lastDashPos); // 没有可截断的分隔符时退出 if ($lastSeparatorPos === false) { echo "未找到匹配的字符串\n"; break; } // 截断到分隔符前的部分 $currentStr = substr($currentStr, 0, $lastSeparatorPos); } while (true);
代码说明
- 从原始字符串开始,每次循环先检查当前字符串是否匹配API
- 通过
strrpos找到最后一个.和-的位置,取最靠后的那个作为截断点 - 截断字符串后进入下一轮检查,直到找到匹配项或无法再截断为止
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

