0

我有一个包含大量旧 phpBB 数据的数据库,其中包含带有以下文本的帖子:

[b:522f1e2c15]bold[/b:522f1e2c15]
[i:522f1e2c15]italic[/i:522f1e2c15]
[u:522f1e2c15]underline[/u:522f1e2c15]
[img:522f1e2c15]http://www.mysite.com/myimage.jpg[/img:522f1e2c15]
[quote:522f1e2c15="Mr Smith"]quoted text by Mr Smith[/quote:522f1e2c15]
[quote="Mr Smith"]quoted text by Mr Smith[/quote]

我正在将这些数据迁移到一个新系统中,而这些标签在我来渲染它们时都需要进行操作,因此它们变为:

<b>bold</b>
<i>italic</i>
<u>underline</u>
<img src="http://www.mysite.com/myimage.jpg" />
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith

在大多数情况下,出现在原始 phpBB 标签中的“id”与“per post”相同,因此帖子可能如下所示(所有标签都包含 id '522f1e2c15'):

This is [b:522f1e2c15]bold[/b:522f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

但是,我还需要在同一个帖子中满足从一个标签到下一个标签的不同的 id,即

This is [b:123f1e2c15]bold[/b:123f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

我还需要能够处理这些标签的嵌套实例,例如,带有一些斜体标签文本的粗体标签文本,即

This is [b:522f1e2c15]bold and [i:522f1e2c15]this is bold italic[/i:522f1e2c15][/b:522f1e2c15].

我最初在这里发布了一个类似的问题,专门用于处理上述的“引用”实例,它的回答似乎是一个可行的解决方案,但通过进一步测试,我注意到如果标签中包含的 id 是在同一篇文章的另一个标签中使用(即我上面发布的示例),然后它会中断。

所以基本上我需要一个处理上述所有问题的正则表达式解决方案。

4

1 回答 1

1

嵌套标签位是 Regex 中难以完成的部分,但 .NET 正则表达式引擎提供了处理它们和 ID 匹配所需的所有工具。您可以应用具有平衡组的正则表达式来解决任务。

也就是说,对于这种数据,我宁愿实现一个真正的解析器,例如使用 GOLD Parser System 或 ANTLR 等工具集。

于 2012-06-18T08:24:33.720 回答