2

我有一个脚本,它获取用户上传的 RTF 文档并将一些个人数据合并到信中(姓名、地址等),并为多人执行此操作。我合并信函内容,然后将其与下一个合并信函内容合并,用于所有人员记录。

有效地,我将单个 RTF 文档组合到自身中,以便我需要将字母合并到的人数记录。但是,我需要首先删除每个合并的关闭 RTF 标记和打开 RTF 标记,否则 RTF 将无法正确呈现。这听起来像是正则表达式的工作。

本质上,我需要一个将删除整个字符串的正则表达式:

}\n\page 任何东西 \par

例如,这个正则表达式将匹配这个:

crap
}
\page{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 September 30, 2008\par
more crap

所以我可以做到:

crap
\page
more crap

RegEx 是这里最好的方法吗?

更新:为什么我必须使用 RTF?

我想让用户上传一个套用信函,然后系统将使用该套用信函来创建合并的信函。由于 RTF 是纯文本,我可以很容易地在代码中做到这一点。我知道,RTF 是规范的灾难,但我不知道还有其他好的选择。

4

2 回答 2

2

我会质疑在这种情况下使用 RTF。我并不完全清楚您要整体做什么,所以我不一定能提出更好的建议,但如果您可以尝试更广泛地解释您的项目,也许我可以提供帮助。

如果这确实是你想要的方式,这个正则表达式给了我正确的输出给我你的输入:

$output = preg_replace("/}\s?\n\\\\page.*?\\\\par\s?\n/ms", "\\page\n", $input);
于 2008-09-30T21:06:32.913 回答
1

对此我可以说 ick ick ick。尽管如此,rcar 的 cludge 可能会起作用,除非出现一些奇怪的边缘情况,即 RTF 实际上并没有以这种形式结束,或者文档范围的样式包含完全弄乱格式的重要信息,或者许多失败模式中的任何其他模式。

于 2008-09-30T21:16:41.687 回答