• 締切済み

正規表現で置換

MySQLの置換関数では正規表現は使えないのでしょうか? 以下のようなSQLを実行させたいのですが、「12345678」の部分はランダムで毎回変わります(8桁は固定)。 UPDATE テーブル SET カラム = REPLACE(カラム, 'ttp://hohe.jp/123/45678', 'ttp://uheuhe.jp'); php等は使用せずmysqlだけで処理させたいと考えています。 宜しく御願いします。

  • MySQL
  • 回答数2
  • ありがとう数3

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

結局REPLACEは正規表現対象じゃなさそうですから、なんとか別の手段で やるしかないでしょう。 今回の件は、ヒットさせる文字列の長さが一定なので、こんな感じでいけるのでは? UPDATE テーブル SET カラム= CONCAT('ttp://uheuhe.jp',MID(カラム,24)) where カラム regexp 'ttp://hohe.jp/[0-9]{3}/[0-9]{5}'

gogovamos
質問者

補足

小出しですいません。 概要(やりたい事)をお知らせいたします。。。 カラムに含まれる文字列の中から「http://******.***.ne.jp/*******/123/***.jpg」で始まるURLを見つけ、 「http://***.***.*.**/*******/2008/06/***.jpg」に置換したい。置換後はカラムに全ての文字列を更新。 *123はランダムだが3桁は固定。 *文字列の中に埋もれているのでURL前後の文字数は変動。 yambejpさんのSQLを参考に以下を作成してみましたが、 MySQLでは、Update 文の中でサブクエリを使うと、You can’t specify target table ~ for update in FROM clause というエラーメッセージが出ることがあります。 サブクエリの中で更新するテーブルを読んでいるような場合に発生するらしい。 文字列の一番目からhttpが出現する前までの文字までを求めるこのサブクエリがUpdateとの中では怒られてしまいます。。。 MID(カラム,1,(select locate('http',(select カラム from テーブル where user_no = 55))) 宜しく御願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

UPDATE テーブル SET カラム ='ttp://uheuhe.jp' WHERE カラム REGEXP 'ttp://hohe.jp/[0-9]{3}/[0-9]{5}';

gogovamos
質問者

補足

すいません! 説明不足というか、根本的に問題定義が足りませんでした。 ttp://hohe.jp/123/45678/******.jpg これを ttp://uheuhe.jp/******.jpg このように加工したい。 宜しく御願い致します。

関連するQ&A

  • 正規表現を使って前方一致置換は可能でしょうか?

    table a に以下のレコードが3件あるとします。 id| name 1 | 1-6-104-1 2 | 1-6-104-2 3 | 2-1-6-104 この状態で、1-6-104の部分だけを1-6-103へ置換し、 以下のようにUPDATEしたいのですが1つのSQLで可能でしょうか? id| name 1 | 1-6-103-1 2 | 1-6-103-2 3 | 2-1-6-104 MySQLのバージョンは5.1です。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 文字列に対してPHP上で一括置き換えしたい

    DBにあるテーブルの指定されたカラム全てを文字列に対してPHP上で一括置き換えしたいです。 phpアドミン上でSQL文を使って UPDATE `テーブル名` SET フィールド名A=REPLACE (フィールド名A,"置換前の文字列","置換後の文字列"); で実行したらうまくいくのですが、 これをPHP上で処理したいと考えてます。 require("godb.php");//DBにアクセス $sql ="UPDATE テーブル名 SET フィールド名 = REPLACE(フィールド名,"AAA","BBB")"; mysql_query($sql2); と実行してもうまくいきません。。。 これって、、、一個一個対象カラムをPHP上で取り出してから 処理をかけないといけないのでしょうか。。 アドバイスいただけたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 秀丸で正規表現による置換

    正規表現でつまずいてしまったので教えてください。 こういうデータがあったとして ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ,,E,77774000,13,77770004479,〇〇〇,0,,,,,l_ ,,E,77774000,21,77770004478,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ,,E,88884000,14,88880004479,〇〇〇,0,,,,,l_ ,,E,88884000,20,88880004478,〇〇〇,0,,,,,l_ 6列目に77770004480があったら、5列目の1を10にする。 6列目に88880004480があったら、5列目の5を10にする。 という事がしたいのですが、7777や8888の部分は必ず数字4桁で固定ですが、 実際には0000-9999まであるため、1万回置換するのは面倒です。 そこで、0004480があったら、ヒットする1や5を10に置き換える事がしたいのですが どのようにしたらいいでしょうか? また、12を2に置き換えることもあるので、5列目は 必ず数字ですが、1桁または2桁となります。 正規表現置換で使用するエディタは、秀丸です。 ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ↓ ,,E,77774000,10,77770004480,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ↓ ,,E,88884000,10,88880004480,〇〇〇,0,,,,,l_ 以上よろしくおねがいいたします

  • 正規表現での置換えについて

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現のタイプがわからない(初心者)

    正規表現で置換ができることを知り、こういうサイトを見つけました。 @IT:Windows TIPS -- Tips:複数ファイルの文字列置換をワンクリックで行なう http://www.atmarkit.co.jp/fwin2k/win2ktips/308strrpl/strrpl.html そこでreplace.wsfを作りましたが、正規表現がうまくいきません。 replace.wsfは正規表現を使う場合は "/ /g" で囲うらしいのですが urlのようなスラッシュ / が多いものを円記号 \ でエスケープしましたがうまくいきません。 さらに http://msdn.microsoft.com/ja-jp/library/aa293063(VS.71).aspx というサイトで任意の文字をドット . で置換したいんですができません。 以下書いたものを載せます 文字はアンダーバー _ で書いています strRepl="/http:[\/][\/]______.____.jp[\/]____/____[\/][0-9][0-9][0-9][0-9][\/][0-9][0-9][\/][0-9][0-9]/g"; /* 置換対象文字列 */ [\/]はかっこなしでも試しましたができませんでした [0-9]の部分は年月日が入ります。 replace.wsfで正規表現を実現させることができません。 正しい方法を教えてください!!

  • 上手い置換方法は?

    いつも助けてくださってありがとうございます。 PHPの置換で困っています。 全てが三桁の数字がいくつか変数で送られてくるんですけど 100はそのまま使いたいのですが001など一桁や2桁の数字の場合 左側の0が邪魔になる場合があります。 そこで、正規表現で右側に0があれば削除すればいいことまではわかったのですが、肝心の関数の使い方が上手く解かりません ereg_replaceだと思うんですけど実際どう使用したらいいのか教えていただけませんか??

    • ベストアンサー
    • PHP
  • phpの正規表現

    いつもお世話になっています。 テキストの中から「hoge.jp/」で終わっているURLだけを取得したいです。以下なら2行目の2つだけを。 phpと正規表現で取得できる方法をご教授下さい! 1.<a href="ttp://nono-com.hoge.jp/index.php">いらないブログ</a> 2.<p><a href="ttp://aaa-com.hoge.jp/">aaaのブログ</a><a href="ttp://bbb-com.hoge.jp/">bbbのブログ</a></p> 3.<a href="ttp://nono-com.hoge.jp/iranai/blog/">いらないブログ</a> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • VBAで正規表現

    Excel2000-VBAにてマクロ作成中です。 以下のような処理を正規表現を使用して一発で実行させたいのですが、 正規表現に指定するパターンがわかりません・・・。 どなたがご存知でしたら教えて下さい。 やりたいこと:ある文字列中の中のスペース(半角全角両方)を半角スペースに変換し、 さらに連続している半角スペースを1つに置換したい。 スペースを半角に統一することは、Replace関数で可能かと思っています。

  • csvファイルを使ってMySQLのテーブルを更新し

    約2万件ある15個のカラムで構成されるMySQLのテーブルがあります。 このテーブルをcsvファイルを使って更新しようと考えています。 csvファイルにはレコードIDとあるカラムの変更する値の2つのセルで 構成されています。 行数は毎回異なりますが、だいたい300行前後です。 csvファイルの具体的イメージはこんな感じです。 id order ============ 2,  200 4,  10 7,  460 11,  35 MySQLのテーブルの方にも「id」と「order」というカラムが存在します。 java や PHP を使ってやる方法はわかるんですが、プログラムを作成しないで SQLだけで行いたいと考えています。 LOAD DATA LOCAL INFILE などがあることがわかったのですが、レコードを REPLACE  するのではなく、一部のカラムをアップデートしたい、ということです。 どなたか、教えて頂けると助かります。 よろしくお願い致します。

  • 文字列のアスタリスク置換

    PHP4でDBはMySQLを使用しています。 DBから取り出したいろいろな長さの文字列を*に置換したいのですがどのようにしたら良いでしょうか。 str_replaceを用いて置換をしようとしていますが文字列長が一定でないため難しいです。 宜しくお願い致します

    • ベストアンサー
    • PHP