Perl 如何使用HTML::Parser解析格式错误的HTML

Perl 如何使用HTML::Parser解析格式错误的HTML,perl,html-parsing,Perl,Html Parsing,我正在尝试将带有meta标记的HTML解析为: <meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com"> 关于如何获得所需值,您有什么想法吗?我认为以下引用是合适的: 有两次有人问我,“巴贝奇先生,如果你把错误的数字输入机器,正确的答案会出来吗?”[…]我不能正确地理解可能引发这样一个问题的思想混乱 –哲学家生平(1864年)中的段落 这就是所谓的原则。在您的情况下,您的HTML格式不

我正在尝试将带有meta标记的HTML解析为:

<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">
关于如何获得所需值,您有什么想法吗?

我认为以下引用是合适的:

有两次有人问我,“巴贝奇先生,如果你把错误的数字输入机器,正确的答案会出来吗?”[…]我不能正确地理解可能引发这样一个问题的思想混乱

–哲学家生平(1864年)中的段落

这就是所谓的原则。在您的情况下,您的HTML格式不正确。如果将其提供给HTML解析器,则必然会得到虚假的输出。HTML标准在处理各种常见错误方面已经相当松懈,但您的示例更不完整

当然,有一种解决方案:不要把输入当作HTML,而是当作某种派生格式,在这种格式中,您的示例恰好是合法的输入。您必须编写自己的自定义解析器,或者根据您的需要调整现有的HTML解析器,但这是可行的

但是,我认为修复输入源比编写自己的解析器更容易。所需的只是要转义的属性内的引号,或者属性使用单引号:

<meta name="id" content="&quot;12345.this.is.a.sample:id:required.67890&quot;@abc.com">
<meta name="id" content='"12345.this.is.a.sample:id:required.67890"@abc.com'>

好的,找到了一种获取此特定问题内容的方法。上面的$origtext变量获取argspec标识符text的值,该值在文档中定义为:

Text causes the source text (including markup element delimiters) to be passed.
所以基本上

print $origtext;
将给我源文本作为输出:

<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">


我可以使用正则表达式利用
$origtext
中包含的这个值来获取所需的内容

希望它只考虑
content=“
感谢您的输入。但是,我不应该更改实际的html文件。不过,我可以在解析时将html加载到内存中,然后更改其内容。有什么方法可以做到这一点吗?@A.I是的:只要你能设计出清晰、明确的规则来解析这些输入,你就可以实现这些规则并进行一些预处理。但重要的是要记住,您的输入不是HTML。
<meta name="id" content=""12345.this.is.a.sample:id:required.67890"@abc.com">