正则表达式来解析多行HTML
我试图用正则表达式解析一个多行html文件 HTML代码:正则表达式来解析多行HTML,html,regex,perl,html-parsing,multiline,Html,Regex,Perl,Html Parsing,Multiline,我试图用正则表达式解析一个多行html文件 HTML代码: <td>Details</td></tr> <tr class=d1> <td>uss_vod_translator</td> 正则表达式: if ($line =~ m/Details<\/td>\s*<\/tr>\s*<tr\s*class=d1>\s*<td>(\w*)<\/td>/) {
<td>Details</td></tr>
<tr class=d1>
<td>uss_vod_translator</td>
正则表达式:
if ($line =~ m/Details<\/td>\s*<\/tr>\s*<tr\s*class=d1>\s*<td>(\w*)<\/td>/)
{
print "$1";
}
我正在使用/s*空间进行多行,但它不起作用。我搜索了一下,甚至用了/\?对于多行,但这也不起作用
有谁能建议我如何解析多行HTML吗
我知道正则表达式是解析HTML的糟糕解决方案。但我有一个遗留的HTML代码,我需要解析它,没有其他选择
有谁能建议我如何解析多行HTML吗
停止尝试使用正则表达式,使用将为您解析它的模块
这是一个很好的解决方案
提供相同的API,但由快速解析器支持
添加了XPath支持和快速解析器。在匹配模式之前,请尝试下面一行
$line=~s/>(\n|\t|\s)+</></gs;
然后您可以将HTML字符串设置为单行 如上所述,永远不要使用正则表达式来解析HTML
我正在使用HTML::TreeBuilder::XPath解析HTML,这大大缩短了我的每个抓取/解析程序的创建时间
以下是您可以如何执行此任务:
use Modern::Perl;
use HTML::TreeBuilder::XPath;
my $html = <<END;
<tr><td>General Info</td></tr>
<tr class=d1>
<td>some info</td></tr>
<tr><td>Details</td></tr>
<tr class=d1>
<td>uss_vod_translator</td></tr>
<tr><td>Another header</td></tr>
<tr class=d1>
<td>some other info</td></tr>
END
my $tree = HTML::TreeBuilder::XPath->new_from_content($html);
my ($details) = $tree->findvalues('//tr[ td[ text() = "Details" ] ]/following-sibling::tr[1]/td[1]');
say $details;
,一般来说。根据变量名判断,您只有一行,那么如何匹配跨越多行的内容呢?最好的答案早就有人写过了: