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

PHP7.4处理RTF文件时preg_replace正则如何保留\par换行标记

RTF格式清理保留换行标记实现方案

原有正则会无差别匹配删除所有RTF控制字、花括号边界,直接修改正则匹配排除规则容易出现优先级冲突、误匹配问题,采用「临时占位-清理-还原」的三步法实现成本最低,且不会破坏原有正则已经验证过的清理效果。

可直接运行的代码

$strFileData = file_get_contents('testdata/test.rtf',true);
// 提前将需要保留的换行标记替换为不会被正则匹配的特殊占位符
$strFileData = str_replace('} \par', '___RTF_NEWLINE_HOLD___', $strFileData);
// 沿用原有正则逻辑清理所有RTF格式编码
$strCleanedFile = preg_replace("/{\*?\\\\.+(;})|\s?\\\[A-Za-z0-9]+|\s?{\s?\\\[A-Za-z0-9‹]+\s?|\s?}\s?/", '', $strFileData);
// 清理完成后将占位符还原为需要保留的换行标记,如需实际文本换行可直接替换为PHP_EOL或"\n"
$strCleanedFile = str_replace('___RTF_NEWLINE_HOLD___', "} \par", $strCleanedFile);

效果验证

针对给出的示例原始行:

{\loch\cf17\fs13\dbch\af7\loch MARTHA SAYERS 003145840 909090KU1 OTH 04/09/22 3 COMM $1895.70 $189.57 $0.00 $0.00 $189.57 USD $189.57} \par \pard\plain \s21\rtlch\af9\afs24

处理后输出为:

MARTHA SAYERS 003145840 909090KU1 OTH 04/09/22 3 COMM $1895.70 $189.57 $0.00 $0.00 $189.57 USD $189.57} \par

既清理了所有无关格式控制字,也完整保留了需要的换行标识。

兼容性优化

如果RTF源文件中}和\par之间可能存在多个空格、制表符等空白字符,可以把第一步的固定字符串替换改成正则匹配,适配更多格式变体:

// 匹配}和\par之间任意长度空白的场景
$strFileData = preg_replace('/}\s+\\\\par\b/', '___RTF_NEWLINE_HOLD___', $strFileData);

内容的提问来源于stack exchange,提问作者Martha J Sayers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:15:40