use*_*651 3 regex perl html-treebuilder
试图匹配tr的是有一个项目class有任何的前三个字母开头eve或day.这是我的尝试:
my @stuff = $p->look_down(
_tag => 'tr',
class => 'qr/eve*|day*/g'
);
foreach (@stuff) {
print $_->as_text;
};
Run Code Online (Sandbox Code Playgroud)
只是好奇,有什么样的物品@stuff?
这个可以吗?见下文:
my @stuff = $p->look_down(
_tag => 'tr',
class => qr/eve.*|day.*/
);
print "\n\n";
foreach (@stuff) {
print $_->as_text . "\n\n";
};
Run Code Online (Sandbox Code Playgroud)
您需要锚定正则表达式,^以使类与前三个字母匹配.
以下是您想要的:
use strict;
use warnings;
use HTML::TreeBuilder;
my $p = HTML::TreeBuilder->new_from_content(do {local $/; <DATA>});
foreach my $tr ($p->look_down(_tag => 'tr', class => qr{^(?:eve|day)})) {
print $tr->as_text, "\n";
};
__DATA__
<html>
<body>
<p>hi</p>
<table>
<tr class="notme"><td colspan=2>row 1 is bad</td></tr>
<tr class="not_eve_or_day"><td colspan=2>row 2 is bad</td></tr>
<tr class="everyrow"><td colspan=2>row 3 is good 1 of 2</td></tr>
<tr class="dayme"><td colspan=2>row 4 is good 2 of 2</td></tr>
<tr class="notme"><td colspan=2>row 5 is bad</td></tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
row 3 is good 1 of 2
row 4 is good 2 of 2
Run Code Online (Sandbox Code Playgroud)