在PHP(REGEX)中串联RTF文件
时间:2020-03-06 14:55:56 来源:igfitidea点击:
我有一个脚本,该脚本需要用户上载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是规范的灾难,但是我不知道有什么其他好的选择。
解决方案
在这种情况下,我会质疑RTF的使用。对我来说,目前还不清楚我们总体上打算做什么,所以我不一定能提出更好的建议,但是如果我们可以尝试更广泛地解释项目,也许我可以帮上忙。
如果这确实是我们想要的方式,则此正则表达式根据输入为我提供了正确的输出:
$output = preg_replace("/}\s?\n\\page.*?\\par\s?\n/ms", "\page\n", $input);
为此,我可以说ick ick ick。但是,rcar的杂物可能会起作用,除非出现一些怪异的极端情况,在这些情况下RTF实际上并没有以这种形式结束,或者文档范围内的样式包括完全弄乱了格式的重要信息,或者许多其他失败模式。