【正規表現】HTMLを加工するための正規表現を3種類教えてください。

1.HTMLのタグからすべての属性を除去。
2.特定のタグを開始・終了セットで除去。
3.コメントを除去。

同様のことが簡単にできるツールがあれば、それでもかまいません。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/01/01 21:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:hiroponta No.1

回答回数517ベストアンサー獲得回数26

ポイント35pt

秀丸で正規表現ではこんな感じでやれます

http://hide.maruo.co.jp/

●特定文字列の全角カナと半角カナの両方を検索

リンゴ|リンゴ(半角カナ)

●カッコ数字文字を検知 

\([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]*"

記入なし

id:t-wata No.2

回答回数82ベストアンサー獲得回数13

ポイント35pt

秀丸は知らないので、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\)\{-}>にてタグ開始以降タグの末尾までにあるすべての文字(改行も含む)にマッチさせています。

その上で、タグの開始を()でくくり、マッチした文字列(<とタグの名前)を置換時に参照できるようにしています。

また、\{-}は最短マッチの表現です。最短マッチは言語によってはサポートされていないので注意してください。

あと不要なタグの削除は、属性削除してるなら、ペア考慮よりも直接開始タグ終了タグを直接指定して削除する方が手っ取り早いですよ。

  • id:kn1967
    言語は何が判りやすい?
    php でよかったら専用の関数があるので、楽なんだけど・・・。
  • id:memo77
    いつもありがとうございます。
    できれば秀丸で処理したいんで、一般的な正規表現で書けるとありがたいです。
  • id:horosco75
    >php でよかったら専用の関数がある
    PHPにタグ属性を除去する関数なんかあったっけ?
  • id:kn1967
    それは無いが、整形したいってのが目的だと思うから、
    トータルでは楽だと考えたんだよ。

    ストーカーが出てきたようだから、回答はごめんだけど、止めとく。
  • id:memo77
    みなさん回答ありがとうございます。

    現在秀丸でテストしているのですが、秀丸の仕様のため、タグ内に複数の改行を含むタグの要素を除去できずに苦闘中です。
    まず
    >|
    <(\/?\w?[0-9])([^>]|\n)*>
    |<
    これがダメで、「あらかじめ改行が含まれる行数を予想してDLLに送り込む」と書いてあるので
    >|
    <(\/?\w?[0-9])([^>]|\n{0,100})*>
    |<
    みたいにしても複数改行を拾ってくれないんですよね。

    秀丸ではなくプログラミング組んじゃうという選択肢もあるんですが、もうちょっとがんばってみてから質問は閉じようと思います。
    秀丸での複数行にまたがる置換についてうまいやり方をご存知の方は教えてください。
  • id:memo77
    あれ、コメント欄ってはてな記法使えないっけ(^^;
    すみません。意を汲んでやってください。
  • id:kn1967
    |ω・)…

    試してないけど
    <(\/?\w+[0-9]?)([^>]|\n)*>
  • id:t-wata
    複数行に苦労しているみたいですが、ググったら秀丸は最短マッチも無いみたいなので、おそらくコメント削除は苦労することになります。
    なので他の言語を使ってプログラミングする方が良いかと。
  • id:kuro-yo
    > 2.特定のタグを開始・終了セットで除去。

    これはコンテキストに依存しますので、
    コンテキスト非依存の正規表現のみの処理では無理があるように思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません