PERL正規表現 ワード境界を表すメタ文字
HTML::TreeBuilderを使ってパースする時にはまったのでメモ。
my $article_body = $tree->look_down(_tag => 'div', class => 'article_body');
if ($article_body) {
$content = $article_body->as_text;
}
これでは期待通りの動作が出来なかった。
$article_body = $tree->find(_tag => 'div', class => 'article_body');
これだと余計なものがかなり混入してくる。
$article_body = $tree->look_down(_tag => 'div', sub { $_[0]->attr('class') =~ /\barticle_body\b/ });
これでようやくうまく動作。
ポイントはメタ文字\b
/\barticle_body\b/
\b は、ワード境界を表す。
もうひとつの\bで挟むことにより、単独の単語として一致する。
つまり以下の時にマッチする。
<div class="article_body">...</div>
<div class="main article_body">...</div>
<div class="article_body post">...</div>
以下の時はマッチしない。
<div class="my_article_body">...</div>
<div class="article_body_class">...</div>
単独の単語の場合のみマッチし、部分文字列の場合はマッチしないので、class検索には必須かも。