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

如何修正PHP函数以正确识别文件中的所有换行符类型

修正后的函数实现

问题核心是原函数的正则表达式存在HTML转义错误,且未通过断言正确区分组合换行符与独立换行符,导致将\r\n误拆分为两种单独类型。以下是修正后的实现:

function ddtt_get_file_eol( $file_contents, $incl_code = true ) {
    // 关联换行符类型标识与对应匹配正则
    $eol_types = [
        '\r\n' => '/\r\n/',
        '\n'   => '/(?<!\r)\n/',  // 仅匹配前面无\r的独立\n
        '\r'   => '/\r(?!\n)/'    // 仅匹配后面无\n的独立\r
    ];
    
    $found = [];
    
    foreach ( $eol_types as $type_label => $regex ) {
        if ( preg_match( $regex, $file_contents ) ) {
            $formatted = $incl_code ? '<code class="hl">'.$type_label.'</code>' : $type_label;
            $found[] = $formatted;
        }
    }
    
    return $found;
}

关键修正说明

  1. 正则修复:将原代码中被HTML转义的(?&lt;!\r)改为正确的负后顾断言(?<!\r),(?&gt;!\n)改为负前瞻断言(?!\n),确保仅匹配独立存在的\n和\r,不会把\r\n中的字符误判为单独类型。
  2. 逻辑优化:将换行符类型标识与正则直接绑定,代码更简洁易维护;同时优先检查\r\n组合类型,符合识别优先级。

测试场景验证

  • 仅含\r\n的文件:返回['\r\n'](或带标签的格式化版本)
  • 仅含\n的文件:返回['\n']
  • 仅含\r的文件:返回['\r']
  • 同时含\r\n和\n的文件:返回['\r\n', '\n']
  • 同时含三种换行符的文件:返回['\r\n', '\n', '\r']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:55:20