簡體   English   中英

需要幫助在Perl中形成正則表達式

[英]Need help in forming regular expression in perl

我在解析html內容時需要一些建議,需要在div中提取標記<\\ a>的ID,並將其存儲到特定於變量的變量中。 我試圖為此做一個正則表達式,但它在所有div中都獲得了標簽的ID。 我需要存儲僅在特定div內的tag <\\ a>的ID。

HTML內容是

<div class="m_categories" id="part_one">
<ul>
<li>-
<a href="#" class="sel_cat " id="sel_cat_10018">aaa</a>
</li>
<li>-
<a href="#" class="sel_cat " id="sel_cat_10007">bbb</a>
</li>
.
.
.
</div>

<div class="m_categories hidden" id="part_two">
<ul>
<li>-
<a href="#" class="sel_cat " id="sel_cat_10016">ccc</a>
</li>
<li>-
<a href="#" class="sel_cat " id="sel_cat_10011">ddd</a>
</li>
<li>-
<a href="#" class="sel_cat " id="sel_cat_10025">eee</a>
</li>
.
.
</div>

需要一些建議,謝謝

更新:我用過的正則表達式

if($ content =〜m / sel_cat“ id =”([^ <] *?)“ / is){}

while($ content =〜m / sel_cat“ id =”([^ <] *?)“ / igs){}

您應該真正研究HTML :: Parser,而不是嘗試使用正則表達式來提取HTML的位。

我們從每個div標簽中提取id元素的一種方法是:

# This parser only looks at opening tags
sub start_handler { 
my ($self, $tagname, $attr, $attrseq, $origtext) = @_;
if ($tagname eq 'div') { # is it a div element?
        if($attr->{ id }) {  # does div have an id?
            print "div id found: ", $attr->{ id }, "\n";
        }       
}
}
my $html = &read_html_somehow() or die $!;

my $p = HTML::Parser->new(api_version => 3);
$p->handler( start => \&start_handler );
$p->parse($html);

這比基於正則表達式的方法更加健壯和靈活。

周圍有很多很棒的HTML解析器。 我有點像Mojo套件,它允許我使用CSS選擇器來獲取DOM的一部分:

use Mojo;

my $dom = Mojo::DOM->new($html_content);

say for $dom->find('a.sel_cat')->all_text;
# Or, more robust:
# say $_->all_text for $dom->find('a.sel_cat')->each;

輸出:

aaa
bbb
ccc
ddd
eee

或對於ID:

say for $dom->find('a.sel_cat')->attr('id');
# Or, more robust_
# say $_->attr('id') for $dom->find('a.sel_cat')->each;

輸出:

sel_cat_10018
sel_cat_10007
sel_cat_10016
sel_cat_10011
sel_cat_10025

如果僅在part_two div中需要這些ID,請使用選擇器#part_two a.sel_cat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM