获取不同HTML标记的最佳方法

获取不同HTML标记的最佳方法,html,regex,language-agnostic,Html,Regex,Language Agnostic,我试图从不同的博客中获取一些HTML,并注意到不同的提供者以不同的方式使用相同的标记 例如,这里有两个主要的提供者以不同的方式使用meta name generator标记: 博主:(内容优先,名字后,是的,单引号!) WordPress:(先命名,后内容) 是否有方法提取所有案例的内容值(单引号/双引号,行中的第一个/最后一个) 另外,尽管我使用的是Java,但如果它通常适用于正则表达式,那么答案可能会帮助更多的人。根据XHTML标准,这些差异其实并不重要 换句话说,它们是完全相同的东西

我试图从不同的博客中获取一些HTML,并注意到不同的提供者以不同的方式使用相同的标记

例如,这里有两个主要的提供者以不同的方式使用meta name generator标记:

  • 博主:
    (内容优先,名字后,是的,单引号!)
  • WordPress:
    (先命名,后内容)
是否有方法提取所有案例的内容值(单引号/双引号,行中的第一个/最后一个)


另外,尽管我使用的是Java,但如果它通常适用于正则表达式,那么答案可能会帮助更多的人。

根据XHTML标准,这些差异其实并不重要

换句话说,它们是完全相同的东西

同样,如果你用单引号替换双引号也是一样的

“规范化”xml文档的典型方法是使用一些将文档视为其信息集表示的API对其进行裁剪。DOM和SAX风格的API都是这样工作的


如果您想手工(或使用正则表达式)解析它们,您必须在代码中复制所有这些内容,在我看来,这是不实际的。

实际上,您可能应该使用某种HTML解析器,在那里您可以检查页面DOM中的每个节点(以及节点属性)。我已经有一段时间没有使用过这些函数了,所以我不知道它们的优缺点,但这里有一个列表,答案是:不要使用正则表达式

真的。使用SGML解析器,或者如果您碰巧知道它是有效的XML,则使用XML解析器(可能几乎永远不会是真的)。你肯定会把事情搞砸,浪费大量的时间去做正确的事情。只需使用已经可用的内容。

注意:单引号(即使没有引号,如果该值不包含空格)根据上下文是有效的。引述:

默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)分隔所有属性值。。。在某些情况下,作者可以指定不带引号的属性值


另外,不要忘了属性的顺序可以颠倒,其他属性也可以出现在标记中。

好的,既然您正在寻找语言不可知论者,那么您可以尝试类似于
/
的正则表达式,并从中获取结果,解析出您正在寻找的特定值。我绝对不是正则表达式专家,所以可能有更好的方法,但在使用工具时,我匹配了您提供的两个字符串。

您可能想尝试一下Java。很容易进行实验,看看解析是否提供了您想要的内容

如果您必须使用正则表达式,这里有一个正则表达式来获取内容部分:

content\s*=\s*['"].*?['"]
返回

content = "blogger"

分别。我不是正则表达式专家,但当你在中给出例子时,它会得到这些


一旦你明白了这一点,你就可以得到引号之间的所有内容,不管你选择的是另一个正则表达式(在这一点上是不道德的)还是仅仅是在字符上循环。

如果你使用java,你可能想看一看,这是一个SAX兼容的解析器,用于“[parsing]HTML,因为它是在野外发现的”

content='Worpress.com'