You need to enable JavaScript to run this app. PHP移除段落首句的函数实现 拆分XML产品描述为标题与详情
优惠活动
大模型
产品
解决方案
定价
更多

PHP移除段落首句的函数实现 拆分XML产品描述为标题与详情

移除段落首句(兼容.?!三类句末标识)的PHP实现

实现核心逻辑

拆分剩余内容的规则和首句提取完全同源:定位到段落中第一个符合标准的句末标点位置,直接截取该位置之后的所有文本,清理冗余空白后即可得到商品详情部分。
匹配规则需要满足几个基础要求:

  • 同时识别.、?、!三类句末终止符
  • 尽量减少对缩写内标点的误判
  • 兼容不同排版习惯下的句末格式

可直接复用的函数代码

function get_content_after_first_sentence(string $paragraph): string {
    // 清理原文首尾冗余空白
    $paragraph = trim($paragraph);
    if (empty($paragraph)) {
        return '';
    }
    // 匹配规则:非贪婪匹配到第一个句末标点,标点满足以下任一情况即判定为真正的句末
    // 1. 后跟空白字符 2. 后跟大写字母(适配无空格排版场景) 3. 到达文本结尾
    $pattern = '/^.*?[.?!](?=\s|[A-Z]|$)/u';
    // 移除匹配到的首句部分
    $remainingText = preg_replace($pattern, '', $paragraph);
    // 清理剩余内容开头的多余空白,返回最终结果
    return trim($remainingText);
}

效果验证

拿你提到的测试用例测试:

输入原文:
Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.

函数输出:
Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
针对问号、感叹号作为句末的非句号场景,函数同样可以正常拆分:

  • 输入"Have you checked our 2-year warranty? All products come with free shipping and 30-day return policy.",输出为All products come with free shipping and 30-day return policy.
  • 输入"This wireless headphone delivers 40 hours of battery life! It supports fast charging and noise cancellation for daily commute.",输出为It supports fast charging and noise cancellation for daily commute.

业务适配调整

  • 正则中的u修饰符必须保留,否则处理含特殊字符、多字节外文的产品描述时会出现截断乱码
  • 匹配断言可根据实际排版灵活调整:
    • 如果你的产品描述都是句末标点后跟标准空格的规范排版,可以把正则中的[A-Z]断言去掉,仅保留(?=\s|$)规则,能彻底避免“Mr.”“U.S.A.”这类缩写中的标点被误判为句末
    • 如果存在句末无空格的非规范排版,保留[A-Z]断言可以保证拆分成功率,只是需要对缩写较多的内容提前做特殊兼容
  • 如果遇到无标点的纯文本场景(比如内容本身没有任何句末标识),函数会返回空字符串,你可以根据业务逻辑增加判断:如果拆分后的剩余内容为空,直接返回原段落作为详情即可,避免出现详情空白的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 00:15:04