在 C++ 中是否有一种简单的方法来判断 RTF 文本字符串是否包含纯格式之外的任何内容。
例如这段文字只是格式化,这里没有真正的内容:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}
在 RichTextControl 中加载 RTF 文本不是一个选项,我想要一些可以快速运行且需要最少资源的东西。
最佳答案
唯一可靠的方法是编写您自己的 RTF 解析器 [spec] , 使用类似 LibRTF 的库,或者您可能会考虑保持 RichTextControl 处于打开状态并使用新的 RTF 文档更新它,而不是每次都销毁该对象。
我认为 RTF 不是一种常规语言,因此不能被 RegEx 正确解析(与 HTML 不同,尽管有数百万次尝试这样做),但您不需要编写完整的 RTF 解析器。 我将从一个简单的字符串解析器开始。尝试:
- 删除{\和} 之间的内容
- 删除标签。标记以反斜杠\开头,后面跟着一些文本。如果反斜杠后跟空格,则它不是标记。
- 文档应至少以一个右花括号结尾,
任何不是空白的内容都应该是文档内容,尽管这可能有一些异常(exception),因此您需要在大量 RTF 样本上进行测试。
关于c++ - RTF文本是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840995/