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

PHP匹配省略号截取标题内容 移除末尾附带的作者信息

PHP截取省略号前标题正文的实现方案

原有代码失效原因

你之前写的两段测试代码没达到预期,问题出在这几个地方:

  • 第一段代码只做了省略号的存在性判断,没有做内容截取,而且正则里的.是通用通配符,没有转义的情况下匹配逻辑本身就有偏差,不是精准匹配三个点的省略号
  • 第二段代码属于函数用法错误:array_key_exists是用来判断数组的键名是否存在,本身不支持正则匹配,而且按空格拆分字符串的思路从根上就有问题——省略号和前面的单词连写时会被分到同一个数组元素里,根本没法精准定位分割点。

可直接落地的实现方案

不用拆分数组,直接定位省略号的位置做截取就行,同时兼容半角...、全角…两种省略号格式,不管省略号和前面的单词有没有空格都能正常处理。

版本1:字符串定位版(性能更好,无正则兼容问题)

/**
 * 清理标题,仅保留省略号前的正文内容
 * @param string $raw_title 原始带作者的标题
 * @return string 处理后的正文标题
 */
function trim_title_by_delimiter($raw_title) {
    // 分别定位两种省略号的首次出现位置
    $half_pos = mb_strpos($raw_title, '...');
    $full_pos = mb_strpos($raw_title, '…');

    $split_pos = null;
    // 取最早出现的省略号位置作为分割点
    if ($half_pos !== false) $split_pos = $half_pos;
    if ($full_pos !== false) {
        $split_pos = is_null($split_pos) ? $full_pos : min($split_pos, $full_pos);
    }

    // 没匹配到省略号时直接返回原标题(兼容异常格式)
    if (is_null($split_pos)) return trim($raw_title);

    // 截取分割点前的内容,去掉末尾多余空格
    return trim(mb_substr($raw_title, 0, $split_pos));
}

WordPress场景下直接调用即可:

$origin_title = get_the_title(155571);
$final_title = trim_title_by_delimiter($origin_title);
// 传入你给出的示例标题,输出结果为:It's no use going back to yesterday, because at that time I was
echo $final_title;

版本2:正则匹配版(代码更简洁)

如果你更习惯用正则处理,也可以用这个版本,效果和上面完全一致:

function trim_title_by_regex($raw_title) {
    // 非贪婪匹配两种省略号,捕获前面的所有正文内容
    if (preg_match('/^(.*?)(?:\.{3}|…)/s', $raw_title, $match)) {
        return trim($match[1]);
    }
    return trim($raw_title);
}

注意事项

  • 写正则匹配半角省略号时,必须把.转义为\.,否则.会匹配任意单个字符,导致匹配逻辑错误
  • 所有字符串处理用mb_前缀的多字节安全函数,避免中文、全角字符截取时出现乱码
  • 代码加了异常兼容:如果标题里没找到省略号,会直接返回原标题,不会出现空内容的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:36:14