1.HTMLのタグからすべての属性を除去。
2.特定のタグを開始・終了セットで除去。
3.コメントを除去。
同様のことが簡単にできるツールがあれば、それでもかまいません。
よろしくお願いします。
秀丸で正規表現ではこんな感じでやれます
●特定文字列の全角カナと半角カナの両方を検索
リンゴ|リンゴ(半角カナ)
●カッコ数字文字を検知
\([a-z0-9]*\)
●すべての全角検知
[^ -~。-゚]
●すべてのid属性※を検知
id="[a-z0-9_-]*"
●すべてのid属性を削除
id="[a-z0-9_-]*"
↓
記入なし
●すべてのid属性の値をtestにする
id="[a-z0-9_-]*"
↓
id="test"
●すべてのid属性の値を空白にする
id="[a-z0-9_-]*"
↓
id=""
●すべてのwidthの数値を検知
width="[0-9]*"
●すべてのwidthの数値を100pxにする
width="[0-9]*"
↓
width="100px"
●すべてのwidthの数値を空白にする
width="[0-9]*"
↓
width=""
●すべてのwidthとheightの値を空白にする
(width|height)="[0-9]*"
↓
\1=""
●すべてのwidthとheightの属性を削除
(width|height)="[0-9]*"
↓
記入なし
秀丸は知らないので、vimの場合の話です。http://www.vim.org
すべての属性削除
%s/\(<[a-zA-Z0-9]\+\)\([^>]\|\n\)\{-}>/\1>/g
特定のタグを削除(Aタグの削除の例、上記属性削除済みを前提)
%s/<a\(\s\|\n\)*>\(.\{-}\)<\/a>/\2/g
コメントを削除
%s/<!--\(.\|\n\)\{-}-->//g
属性削除は、
<a href="hogehoge"
のように改行をはさんだり、
<a href=hogehoge><td nowrap>
のようにダブルクオートやクオートを省略したり、a=bの形以外で書かれている属性も考慮する必要があります。また、
var href="hogehoge"
のようなものはマッチしないようにする必要もあります。
上記の正規表現では<[a-zA-Z0-9]\+の表現でタグの開始、\([^>]\|\n\)\{-}>にてタグ開始以降タグの末尾までにあるすべての文字(改行も含む)にマッチさせています。
その上で、タグの開始を()でくくり、マッチした文字列(<とタグの名前)を置換時に参照できるようにしています。
また、\{-}は最短マッチの表現です。最短マッチは言語によってはサポートされていないので注意してください。
あと不要なタグの削除は、属性削除してるなら、ペア考慮よりも直接開始タグ終了タグを直接指定して削除する方が手っ取り早いですよ。
コメント(9件)
php でよかったら専用の関数があるので、楽なんだけど・・・。
できれば秀丸で処理したいんで、一般的な正規表現で書けるとありがたいです。
PHPにタグ属性を除去する関数なんかあったっけ?
トータルでは楽だと考えたんだよ。
ストーカーが出てきたようだから、回答はごめんだけど、止めとく。
現在秀丸でテストしているのですが、秀丸の仕様のため、タグ内に複数の改行を含むタグの要素を除去できずに苦闘中です。
まず
>|
<(\/?\w?[0-9])([^>]|\n)*>
|<
これがダメで、「あらかじめ改行が含まれる行数を予想してDLLに送り込む」と書いてあるので
>|
<(\/?\w?[0-9])([^>]|\n{0,100})*>
|<
みたいにしても複数改行を拾ってくれないんですよね。
秀丸ではなくプログラミング組んじゃうという選択肢もあるんですが、もうちょっとがんばってみてから質問は閉じようと思います。
秀丸での複数行にまたがる置換についてうまいやり方をご存知の方は教えてください。
すみません。意を汲んでやってください。
試してないけど
<(\/?\w+[0-9]?)([^>]|\n)*>
なので他の言語を使ってプログラミングする方が良いかと。
これはコンテキストに依存しますので、
コンテキスト非依存の正規表現のみの処理では無理があるように思います。