提取HTML标记内的所有内容

时间:2011-10-23 14:50:43

标签: regex perl

我在尝试在HTML标头标记之间提取文本时遇到了实际问题。我有以下用于测试的Perl脚本:

#!/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。然后我可以使用print $ 1 $ myhtml $ 2

添加我的文本

我无法让它发挥作用:(

2 个答案:

答案 0 :(得分:4)

不要使用与结束.*匹配的>,而是尝试匹配除了结束[^>]*之外的>

但是,一般来说,正则表达式不是解析HTML的正确方法。它只是不起作用。编写HTML的方式有很多变化,你会遇到很多荒谬的问题。

真正的解决方案是解析DOM树并找到你想要的那种方式。尝试使用XML parser

答案 1 :(得分:0)

if ($subject =~ m!<html[^>]*>(.*?)</html>!) {
    $result = $1;
}

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

此外,如果这是您正在考虑提取的ONLY标记,您可以使用正则表达式。但是,如果要从html / xhtml / xml等内部提取特定标记,则应考虑使用为此作业编写的无数模块之一。

相关问题