【问题标题】:Parse a string for open and close tags解析打开和关闭标签的字符串
【发布时间】:2016-02-15 03:24:24
【问题描述】:

假设我有以下字符串:

  • “这个 [color=RGB] 是 [\color] 一个字符串。”
  • “这个 [color=RGB][bold] 是 [\bold][\color] 另一个字符串。”

我正在寻找的是一种解析字符串以提取标签信息然后重建没有标签的原始字符串的好方法。 文本渲染时会用到标签信息。

显然我可以通过直接使用字符串(find/substr/replace 等)来实现目标,但我想问是否有另一种更简洁的方法,例如使用正则表达式。

注意:

  • 我需要的标签很少,但可以嵌套它们(仅不同类型)。
  • 无法使用 Boost。

【问题讨论】:

  • “无法使用 Boost。”那么,如何使用 flex & bison 呢? (抱歉,我不确定是否可以使用这些工具进行存档。)
  • 这类似于 HTML - 你可以让你的生活更轻松,并切换到 HTML(或另一种支持良好的标记语言)。然后,您可以使用现有库进行解析/渲染/...
  • 不要使用正则表达式。嵌套标签在正则表达式中并不有趣。此外,您可能想阅读有关此的答案:stackoverflow.com/questions/8577060/…
  • 您可能想提及标签格式是否遵循标准,例如 BBCode 或类似的。可能有专用的解析库,它们比使用正则表达式解析更容易使用、更快且更不容易出错。
  • 标签不匹配怎么办?例如"This is[\color] a string.""This [color=RGB]is a string."?

标签: c++ regex string c++11


【解决方案1】:

有一个非常简单的答案可能有效,具体取决于字符串的复杂性。 (我对您的理解是正确的,即您只想得到 cleaned 字符串,而不是实际提取标签。)只需删除所有标签。替换

\[.*?]

什么都没有。 Example here

现在,如果您的字符串应该能够包含类似标签的对象,这可能不起作用。

问候

【讨论】:

  • 不,作为第一步,我需要解析标签并填充一些结构(例如,从哪里到要为文本着色的位置)。那么,是的,我需要清理后的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2014-09-14
  • 2011-01-27
  • 1970-01-01
相关资源
最近更新 更多