HTMLのタグでないところだけ置換をさせたい
これもなかなか厄介者です。
正規表現で一気にやってしまおうと思うとハマってしまうので、
#!/usr/local/bin/perl4
$comment = ここに変換したいテキストを代入;
while($comment =~ /([^>]*>)/g){
$_ = $1;
# ここで、$textにタグ以外の部分、$tagにタグが入る。
($text,$tag) = /^([^<]*)(<(.|\n)*)$/ ;
# $_にタグが含まれなかった場合は$_の内容全てを$textに代入
$text = $_ if($text eq '' && $tag eq '');
# 変換
push(@result, $text, $tag);
}
$comment = join("",@result);
# 解放
undef @result;
print $comment;
ここの$commentの部分にHTMLドキュメントをいれてやります。
で、# 変換の行に来ると、$textにタグで囲まれていない部分が入りますので、
好きなように置換をかけてやればよいでしょう。$tagにはタグの部分が入り
ますが、タグの終了記号[>]はいっていませんので注意が必要です。
ファイルや標準入力から読み込む場合は、$/を[>]にしてやってwhile(<>)で
回したほうがメモリの節約になるでしょう。
例:
open(FILE, $file);
$/ = '>';
while(<FILE>){
($text,$tag) = /^([^<]*)(<(.|\n)*)$/ ;
# $_にタグが含まれなかった場合は$_の内容全てを$textに代入
$text = $_ if($text eq '' && $tag eq '');
# 変換
push(@result, $text, $tag);
}
close(FILE);
$comment = join("",@result);
# 解放
undef @result;
print $comment;