お世話になります。まとまった数のhtmlファイルをxhtmlに書き直したいと思っています。それで、<link rel="prev" href="hoge.htm">のような文の末尾に href="hoge.htm" />とスラッシュを入れたいのですが、link rel="prev" は全ファイル共通だけど、hoge.htmの部分は一定ではないという場合、正規表現をどう書けばうまく置換できるのか教えて下さい。よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/09/20 05:11:12
  • 終了:2007/09/20 09:41:07

回答(2件)

id:wizemperor No.1

wizemperor回答回数379ベストアンサー獲得回数522007/09/20 05:35:28

ポイント70pt

「 /」を追加するということですよね。

link要素だけなら次のような感じでできます。

検索

/<link(?:\s+[^"\'>]*"[^"]*"|\s+[^"\'>]*\'[^\']*\')*[^>]*)>/i

置換

<$1 />

他の空要素も変換するなら次のような感じ。

検索

/<((?:area|base|basefont|br|hr|img|input|isindex|link|meta|param)(?:\s+[^"\'>]*"[^"]*"|\s+[^"\'>]*\'[^\']*\')*[^>]*)>/i

置換

<$1 />
id:mysterious2005

早々の回答ありがとうございました。教えていただいた二つのパターンを「秀丸のgrep」「Devas(http://www.vector.co.jp/soft/win95/util/se162621.html)」「複数行置換(http://www.vector.co.jp/soft/win95/util/se407023.html)の3つで試してみたのですが、それぞれ、

秀丸のgrep→「正規表現での'|'の前後の文字がないか、または+*?の直前に文字がありません」

Devas→「検索文字列が不正です」

複数行置換→「(入力した検索文字列の後に)が多すぎます」

とエラーメッセージが出てしまい、うまくいきませんでした。

2007/09/20 06:05:01
id:wizemperor No.2

wizemperor回答回数379ベストアンサー獲得回数522007/09/20 05:49:13

(コメントが書けないみたいなので補足)

この回答にポイントはいりません。

ソフトによって書き方やエスケープの仕方が違うと思うので、素の正規表現も書いておきますね。

ソフトに合わせて、書き方やエスケープの仕方は調整してみてください。


検索(小文字・大文字区別なしで検索)

<link(?:\s+[^"'>]*"[^"]*"|\s+[^"'>]*'[^']*')*[^>]*)>

置換

<$1 />

検索(小文字・大文字区別なしで検索)

<((?:area|base|basefont|br|hr|img|input|isindex|link|meta|param)(?:\s+[^"'>]*"[^"]*"|\s+[^"'>]*'[^']*')*[^>]*)>

置換

<$1 />
id:mysterious2005

結局、htm">で終わるのはlink要素ぐらいだろうということで、htm">$で検索して置換という方法を取ってみました。

今回はこれでうまくいきましたが、もう少し勉強しないと駄目ですね。今回教えていただいたものを手がかりに、正規表現を覚えたいと思います。ありがとうございました。

2007/09/20 09:40:28
  • id:wizemperor
    ごめんないさい、linkのみ置換する場合の正規表現は間違えてました。
    「<link…」→「<(link…」 (括弧が抜けてた)

    正規表現はツールによって書き方が微妙に違ったりするので、ツールに合わせないと動かなかったりします。

    ちょっと申し訳ないので、もうちょっと簡単な正規表現も書いておきます。

    検索
    <link ([^>]*)>

    置換
    <link $1 />

    (「$1」はツールによっては「\1」や「\\1」だったりするかもしれません)

    この方法は正確性は落ちますが、簡単な正規表現で書けますし、
    元のHTMLに間違い等がないという前提ならばこれでよいかもしれません。
    また使う機会がありましたらお試しください。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません