RSSフィード生成時titleに含まれるHTMLタグ部分を除去したい
RSSフィードの各アイテムのtitleとして取得してきた文字列にHTMLタグが含まれていて、タグが表示されると読みにくいので、HTMLタグ部分自体を除去してしまうことにした。
$article =~ s/<br>|<a.*">|<\/a>|<img.*[0-9]>//g;
しかし、この正規表現だとリンクのHTMLタグが二回以上ある場合、間の文字列が全て除去されてしまう。
泥臭く文字列分割してやるしかないのかな。
追記
とりあえず泥臭くやった結果が以下。対象文字列に「%」が含まれていないという前提ですが。
$article =~ s/</<%/g; my @tmp_array = split( /<|>/, $article ); foreach my $tmp ( @tmp_array ) { unless( $tmp =~ /^%/ ) { $result = $result.$tmp; } }
さらに追記
mixiで質問投げてみたら、マイミクの方に教えていただけた。
$article =~ s/<br\s*\/?\s*>|<a.+?>|<\/\s*a>|<img.+?>//g;
なるほど、つながってしまうのは「.*」特有なので、「.*」を使わないで書けばよいのか。
Perlの正規表現で「*」や「+」は原則、最長パターンにマッチしてしまうので、最短パターンでマッチさせたい場合は「*」「+」のあとに「?」をつけてやる。
あと、/とaの間のスペースも考慮しないとダメよと暗黙に教えていただいた。。
というか、HTMLタグ部分自体全てを除去するのであれば
$article =~ s/<.+?>//g;
これでもよいのですね。
うーん、まだまだだなぁ。