我正在使用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解析器能够完成我需要的所有这些?
再次,先谢谢。
我现在正在做这个版本来解释我的问题的适用性(如所提出的)。好吧,在我开始之前,我想说我正在尝试做的事情是我以前从未做过的事情,这不是我所在领域的事情,所以它可能不是最合适的方式。总之...
我正在开发一个网站,允许用户阅读内容但无法编辑内容(编辑或删除文字)。但是,用户仍然可以标记/突出显示内容的摘录(范围)(带有一些样式)。这是一个很大的摘要。
现在问题是如何做到这一点(在Java中)。在客户端,目前,我正在考虑使用TinyMCE来启用内容样式而不进行文本编辑。我可以将程式化的文本保存到数据库中,但这会占用大量空间,因为每个客户端都可以这样做,因为它们是很多客户端。因此,如果客户端标记段落的片段,则将段落保存在数据库中,以便系统中的每个客户端在内存方面都有点代价。
所以我想到只保存用户在数据库中做出的标记的范围(索引)。与所有需要样式的文本相比,保存几个数字要容易得多。例如,在这种情况下,我可以在表格中保存一行/记录:
这需要翻译/转换,从数据库到HTML,从HTML到数据库。设置转换器可能很容易(我猜),但我不知道如何获取索引(遵循此逻辑)。然后我们在问题开始时再次停止。
只是说清楚:
如果有人提供的解决方案会花钱,例如付费API,工具或类似的东西,很遗憾,这个选项对我来说是不可行的。对不起:/
以类似的方式,我知道使用JavaScript(客户端)进行此处理是理想的。事实证明,我没有专门的JavaScript团队,所以这需要在服务器端完成(不幸的是),这是用Java编写的。我只能使用JavaScript解决方案,如果它已经准备好,使用方便快捷。您是否知道任何现成的,易于使用的库可以以简单的方式完成它?它存在吗?
答案 0 :(得分:0)
您不能使用正则表达式来解析HTML。有关详细信息,请参阅this question(其中包括this rather epic answer以及其他一些有趣的答案),但HTML不是常规语言,因为它具有递归结构。
任何允许递归的语言都不是定义的,所以你不能用正则表达式解析它。
请注意,HTML是context-free languages(或者至少是pretty close to context-free)。另请参阅Chomsky hierarchy。