用PHP连接RTF文件(REGEX)

时间:2008-09-30 16:17:12

标签: php regex rtf

我有一个脚本,它接受用户上传的RTF文档并将某些人数据合并到字母(名称,地址等)中,并为多人执行此操作。我合并了信件内容,然后将其与下一个合并信件内容相结合,用于所有人员记录。

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

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

} \ n \ page ANYTHING \ 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是一个规范的灾难,但我不知道任何其他好的选择。

2 个答案:

答案 0 :(得分:2)

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

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

$output = preg_replace("/}\s?\n\\\\page.*?\\\\par\s?\n/ms", "\\page\n", $input);

答案 1 :(得分:1)

对此,我可以说ick ick ick。然而,rcar的cludge可能会起作用,除非一些奇怪的边缘情况,其中RTF实际上并未以该形式结束,或者文档范围的样式包括完全混淆格式化的重要信息,或许多其他失败模式。