use*_*023 0 html regex tags perl
我是Perl的新手,我试图<li> </li>在字符串中的所有标签之间提取文本,并使用正则表达式或分割/连接将它们分配到数组中.
例如
my $string = "<ul>
<li>hello</li>
<li>there</li>
<li>everyone</li>
</ul>";
Run Code Online (Sandbox Code Playgroud)
这个代码......
foreach $value(@array){
print "$value\n";
}
Run Code Online (Sandbox Code Playgroud)
...导致此输出:
hello
there
everyone
Run Code Online (Sandbox Code Playgroud)
注意:不要使用正则表达式来解析HTML.
第一个选项是使用HTML :: TreeBuilder完成的,HTML :: TreeBuilder是可以使用的许多HTML Parser之一.您可以访问上面提供的链接并阅读文档并查看给出的示例.
use strict;
use warnings;
use HTML::TreeBuilder;
my $str
= "<ul>"
. "<li>hello</li>"
. "<li>there</li>"
. "<li>everyone</li>"
. "</ul>"
;
# Now create a new tree to parse the HTML from String $str
my $tr = HTML::TreeBuilder->new_from_content($str);
# And now find all <li> tags and create an array with the values.
my @lists =
map { $_->content_list }
$tr->find_by_tag_name('li');
# And loop through the array returning our values.
foreach my $val (@lists) {
print $val, "\n";
}
Run Code Online (Sandbox Code Playgroud)
如果你决定在这里使用正则表达式(我不推荐).你可以做点什么......
my $str
= "<ul>"
. "<li>hello</li>"
. "<li>there</li>"
. "<li>everyone</li>"
. "</ul>"
;
my @matches;
while ($str =~/(?<=<li>)(.*?)(?=<\/li>)/g) {
push @matches, $1;
}
foreach my $m (@matches) {
print $m, "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
hello
there
everyone
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9004 次 |
| 最近记录: |