gpt4 book ai didi

java - Java 中的 HTML 词法分析器

转载 作者:行者123 更新时间:2023-12-01 19:20:44 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的词法分析器来理解它们是如何工作的。我正在尝试找出一个好的 POSIX 字符串,它可以捕获任何类型的打开 HTML 标签。我制作了一个几乎可以工作但在更复杂的标签(如元标签等)上失败的标签。到目前为止,这就是我所拥有的:

"<\\p{Alnum}+(\\p{Space}\\p{Alnum}+\\p{Space}*=\"*\\p{Space}*\\p{Alnum}+\"*)*\\p{Space}*>"

这个 POSIX 字符串捕获了很多标签,但丢失了一些标签,例如元标签和 DOC 标签。这是失败的标签:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

任何帮助将不胜感激。我知道这可能不是制作 Lexer 的最佳方法,但这只是为了帮助我了解 Regex 的工作原理。

最佳答案

除引号之外的任何内容

对于属性的值,正确的扫描方法是匹配非引号的任何内容。该部分的正则表达式如下所示:

    \"[^\"]*\"

我不确定为什么你有 \"*;引号不能重复。还有其他问题,例如允许到处都有空格或除了双引号之外还接受单引号(name ='value'name="value" 的替代方案)。但是还有一个更大的问题,所以我不会挑剔。

过度的词法分析器

一个更重要的问题是您在词法分析器中塞入了太多解析。词法分析器的工作是将字符流转换为标记流。标记是文本中不可分割的小单元。我不会尝试将整个开始标记、元素名称、属性等解析为单个标记。

相反,您应该 pry 出标签的较小部分:左尖括号、标识符、标识符、等号、字符串、右尖括号。让词法分析器识别这些片段,并将其留给解析器来确定这些标记按该顺序构成元素标签。

关于java - Java 中的 HTML 词法分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com