是否可以删除标签(或序列)并将它们作为索引关联或记住?

时间:2017-03-20 20:14:59

标签: java html regex algorithm indexing

我正在使用HTML标记,我需要解释HTML文档。这就是我需要实现的目标:

  • 我必须识别并删除HTML标记而不删除 原创内容。
  • 我必须存储以前存在的标记的索引。

所以这是一个例子。想象一下,我有以下标记:

This <strong>is a</strong> message.

在此示例中,我们有一个包含35个字符的String序列,并标有strong标记。我们知道,HTML标记有一个开始和结束,如果我们将开始和结束标记解释为一系列字符,每个标记也有一个开始和结束(一个字符索引)。

同样,在前面的示例中,open / start标记的开始索引是5(从索引0开始),结束索引是13.相同的逻辑转到关闭标记。

现在,一旦我们删除了标记,我们就会得到以下结果:

This is a message.

问题:

我怎么能记住这个序列中我可以再次进入标记的地方?

例如,一旦删除了标记,我怎么知道我必须在X位置/索引中插入开始标记,并在Y位置/索引中插入结束标记...如下所示:

This is a message.
     5   9
index 5 = <strong>
index 9 = </strong>

我必须记住,有可能找到以下情况:

<a>T<b attribute="value">h<c>i<d>s</a> <g>i<h>s</h></g> </b>a</c> <e>t</e>e<f>s</d>t</f>.

我需要在Java中实现 。我已经弄清楚如何获取文档中每个标记的开始和结束索引。为此,我使用正则表达式(Pattern和Matcher),但我仍然不知道如何再次正确插入标签(如上所述)。我想要一个有效的例子(如果可能的话)。它不一定是世界上最好的例子(最好的解决方案),但只是在任何情况下都能正常运行

如果有人不理解我的问题,请评论我会做得更好。

提前致谢。

修改

评论中的人说我不应该使用正则表达式来处理HTML。我不关心使用或不使用正则表达式来解决这个问题,我只是想解决它,无论如何(但当然,以最恰当的方式)。

我提到我正在使用正则表达式,但我不介意使用另一种呈现相同解决方案的方法。我读到XML解析器可能是解决方案。那是对的吗?是否有一个XML解析器能够完成我需要的所有这些?

再次,先谢谢。

编辑2

我现在正在做这个版本来解释我的问题的适用性(如所提出的)。好吧,在我开始之前,我想说我正在尝试做的事情是我以前从未做过的事情,这不是我所在领域的事情,所以它可能不是最合适的方式。总之...

我正在开发一个网站,允许用户阅读内容但无法编辑内容(编辑或删除文字)。但是,用户仍然可以标记/突出显示内容的摘录(范围)(带有一些样式)。这是一个很大的摘要

现在问题是如何做到这一点(在Java中)。在客户端,目前,我正在考虑使用TinyMCE来启用内容样式而不进行文本编辑。我可以将程式化的文本保存到数据库中,但这会占用大量空间,因为每个客户端都可以这样做,因为它们是很多客户端。因此,如果客户端标记段落的片段,则将段落保存在数据库中,以便系统中的每个客户端在内存方面都有点代价。

所以我想到只保存用户在数据库中做出的标记的范围(索引)。与所有需要样式的文本相比,保存几个数字要容易得多。例如,在这种情况下,我可以在表格中保存一行/记录:

  • 在X段中,从Y到Z索引,用户P定义了ABC 风格化。

这需要翻译/转换,从数据库到HTML,从HTML到数据库。设置转换器可能很容易(我猜),但我不知道如何获取索引(遵循此逻辑)。然后我们在问题开始时再次停止。

只是说清楚:

如果有人提供的解决方案会花钱,例如付费API,工具或类似的东西,很遗憾,这个选项对我来说是不可行的。对不起:/

以类似的方式,我知道使用JavaScript(客户端)进行此处理是理想的。事实证明,我没有专门的JavaScript团队,所以这需要在服务器端完成(不幸的是),这是用Java编写的。我只能使用JavaScript解决方案,如果它已经准备好,使用方便快捷。您是否知道任何现成的,易于使用的库可以以简单的方式完成它?它存在吗?

1 个答案:

答案 0 :(得分:0)

您不能使用正则表达式来解析HTML。有关详细信息,请参阅this question(其中包括this rather epic answer以及其他一些有趣的答案),但HTML不是常规语言,因为它具有递归结构。

任何允许递归的语言都不是定义的,所以你不能用正则表达式解析它。

请注意,HTML是context-free languages(或者至少是pretty close to context-free)。另请参阅Chomsky hierarchy