dポイントプレゼントキャンペーン実施中!

DB内データの<a>タグを、全て[url]タグへ変更したいのですが、どうすればよいでしょうか?

<経緯>
・ブログを移行したのですが、新しいブログでは、<a>タグを全てエスケープするので、該当データを[url]タグへ一括変換して、リンク表示させたい

<変換したいこと>
・対象DB指定カラム(entry)内の、全ての「<a href="○○">△△</a>」を、「[url=○○]△△[/url]」へ変更したい

<質問>
・どうやって、やるのでしょうか?
・UPDATE文を利用して、正規表現とかでやるのでしょうか?
・それとも、DUMPデータを取得して、秀丸で正規表現とかでやるのでしょうか? その場合は、どう書けば良いでしょうか?

<環境>
・MySQL

A 回答 (2件)

・どうやって、やるのでしょうか?


たぶん、
残念ながら手間がかかりますが、「<a href="○○">△△</a>」をすべて洗い出して
「[url=○○]△△[/url]」との対応を1個ずつ決めてから
1個ずつ処理するしかないです。

というのは、正規表現で検索はできるけれど、正規表現で置き換えはできない場合が多いからです。
(秀丸は使っていないから未確認です。)
例えばエディタで置き換えで正規表現が使えるチェックをいれて(秀丸はチェックなどしなくてもいいかもしれませんが)、この文書で、「正規表現*でき」を「AAA*BB」にでも置き換えしてみてください。
「正規表現で検索はでき」が「AAA*BB」におきかわってしまい、「AAAで検索はBB」とはならないはず。

という前提の下、
selectで、<a href="○○">△△</a>を全部探し出して、リストを作って、

update ・・・ set entry = replace(entry,'<a href="○○">△△</a>','[url=○○]△△[/url]')
を複数回実行するのが一番早いかなと思います。
(replaceは大文字小文字を区別しますので注意。whereはつけたほうが早いけどなくても大丈夫)

★!以下はもっと簡単な方法ですが特殊な前提が必要!★
<a href="○○" の○○"の部分が必ず・・・.html"で終わっていて、
他には.html"の文字列がないならば以下の方法が使えるかもしれません。
※*.htmや*.php、*.jspで終わっているとしても同様。
update ・・・ set
entry = replace(replace(replace(entry
,'<a href="'.'[url=')
,'.html">','.html]')
,'</a>','[/url]')
の実行。(それぞれの要素を置き換える)

ただし、<a>以外の要素で.html">が含まれていると完全にデータが潰れてしまいますので
!!!要注意!!!
(例えば、<iframe>や<form>等。
 <button>もscript埋め込みになっていてたまたま最後が.html">になっていたとかが
 ありえるので危ない。)
2つ目のreplaceを
,'">',']')
とすれば.htmlだろうがなんだろうが<a>はうまくいくのにと思うかもしれませんが
このために他が潰れるから使えないということでした。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
大変参考になりましたー

お礼日時:2012/09/03 00:44

FooEditorならグループ置き換えの機能があるので<a href=○○>はそのまま置き換えることができます


ただ、<a href="○○">と</a>を同時に置き換えることはできないので、2回に分けて実行する必要がありますが…

例(FooEditorの場合)
検索パターン:<a href="(?<foo>.+)">
置き換えパターン:[url=$1]
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
「グループ置き換え機能」というキーワード、参考になりましたー

お礼日時:2012/09/03 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!