- ベストアンサー
正規表現でHTMLの修正を素早く行う方法
- 秀丸のgrep置換を利用して、HTMLの正規表現を使った修正を素早く行う方法について教えてください。
- 特定のタグ以外を削除するために、正規表現パターンをどのように表現すればよいのか教えてください。
- 残したいタグがhtml, head, body以外の場合、正規表現をどのように書けば良いのか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
特定の文字列を含まない正規表現には、 いわゆる「否定先読み」というパターンが使えます。 (詳しい解説は参考URLをご覧ください。) 例えば、titleタグ以外のタグの要素(開始タグ~包含テキスト~終了タグ)を表現すると、 以下のようになります。 <(?!title>)([^/]+)>.+</\1> title、h1、li を除く場合は、以下のようになります。 <(?!(title|h1|li)>)([^/]+)>.+</\1> 但し、この正規表現では、要素内に他のタグがネストされている場合、 内側のタグの要素しか取得できませんでした。 ご参考までに。
その他の回答 (1)
- 4017B
- ベストアンサー率73% (1336/1814)
1つの正規表現置換だけで一気にやるのは難しいと思います。秀丸ならマクロを使った方が便利です。 ━ ココから ━━━━━━━━━━━━━━━━━━━━━━━━ $my_num = str(tickcount); replaceallfast "<(title|h1|li)>([^<>]+?)</\\1>", "{"+ $my_num +":{\\1}}\\2{{\\1}:"+ $my_num +"}", regular; replaceallfast "<ul>", "{"+ $my_num +":{ul}}", regular; replaceallfast "</ul>", "{{ul}:"+ $my_num +"}", regular; replaceallfast "<([a-zA-Z2-6]+)[^<>]*?>[^<>]+?</\\1>", "", regular; replaceallfast "</?([a-zA-Z]+)[^<>]*?/?>", "", regular; replaceallfast "\\{"+ $my_num +"\\:\\{", "<", regular; replaceallfast "\\{\\{", "</", regular; replaceallfast "\\}\\:"+ $my_num +"\\}", ">", regular; replaceallfast "\\}\\}", ">", regular; replaceallfast "\\n", "", regular; replaceallfast "</(title|h1|ul|li)>", "</\\1>\\n", regular; replaceallfast "<title>([^<>]+?)</title>\\n", "<html>\\n<head>\\n<title>\\1</title>\\n", regular; replaceallfast "</ul>\\n", "</ul>\\n</body>\\n</html>", regular; ━ ココまで ━━━━━━━━━━━━━━━━━━━━━━━━ ~上記の様なサンプルで置換処理可能です。1回で済まそうとせずに、敢えて何回かに分けて置換処理を行う事で、確実に処理する様な流れにしています。 P.S. 秀丸の正規表現だと、基本的にマッチングに真なりでしか判定出来ないので。例文の様に「○○を除く文字列」という正規表現は非常に難しくなります。もちろん可能は可能ですが、正規表現による置換処理しか出来ない環境でなければ、特に拘らずに柔軟に対応した方が簡単だと思います。
お礼
ありがとうございます!大変参考になりました!
お礼
ありがとうございます!大変参考になりました!