You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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);

代码说明

  1. 从原始字符串开始,每次循环先检查当前字符串是否匹配API
  2. 通过strrpos找到最后一个.和-的位置,取最靠后的那个作为截断点
  3. 截断字符串后进入下一轮检查,直到找到匹配项或无法再截断为止

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:41:11