我在尝试提取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中。
我就是不能让它工作:
发布于 2011-10-23 22:57:26
if ($subject =~ m!<html[^>]*>(.*?)</html>!) {
$result = $1;
}注意事项。您的输入以html开头,以HTML结尾。这是不可能的。
此外,如果这是您正在考虑提取的唯一标记,则可以使用regex。但是,如果您希望从html/xhtml/xml等内部提取特定的标记,则应该考虑使用为此工作编写的无数模块中的一个。
发布于 2011-10-23 22:53:55
不使用与结束>匹配的.*,而是尝试使用[^>]*,它可以匹配除结束>之外的任何内容
但是,一般而言,正则表达式不是解析HTML的正确方法。它就是不起作用。HTML的编写方式有如此之多的变化,以至于您会遇到许多荒谬的问题。
真正的解决方案是解析DOM树,并以这种方式找到您想要的内容。尝试使用XML parser。
https://stackoverflow.com/questions/7866842
复制相似问题