首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取HTML标记中的所有内容

提取HTML标记中的所有内容
EN

Stack Overflow用户
提问于 2011-10-23 22:50:43
回答 2查看 172关注 0票数 0

我在尝试提取HTML头标记之间的文本时遇到了真正的问题。我有下面的Perl脚本,我用它来测试:

代码语言:javascript
复制
#!/usr/bin/perl

my $text = '<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-    micr=osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=//www.w3.org  /TR/REC-html40"><head><META HTTP-EQUIV=3D"Content-Type" CONTENT==3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=oft Word 14 (filtered medium)">This is a test</HTML>';

my $html = "Add this first";
$text =~ /(<html .*>)(.*)/i;
print $text . "\n";

我需要实现的是将之间的文本提取到$1中,然后将剩下的文本提取到$2中。

我就是不能让它工作:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-23 22:57:26

代码语言:javascript
复制
if ($subject =~ m!<html[^>]*>(.*?)</html>!) {
    $result = $1;
}

注意事项。您的输入以html开头,以HTML结尾。这是不可能的。

此外,如果这是您正在考虑提取的唯一标记,则可以使用regex。但是,如果您希望从html/xhtml/xml等内部提取特定的标记,则应该考虑使用为此工作编写的无数模块中的一个。

票数 0
EN

Stack Overflow用户

发布于 2011-10-23 22:53:55

不使用与结束>匹配的.*,而是尝试使用[^>]*,它可以匹配除结束>之外的任何内容

但是,一般而言,正则表达式不是解析HTML的正确方法。它就是不起作用。HTML的编写方式有如此之多的变化,以至于您会遇到许多荒谬的问题。

真正的解决方案是解析DOM树,并以这种方式找到您想要的内容。尝试使用XML parser

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7866842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档