1

%2Bファイル名に出現するすべての を に置き換えようとしています_

例えば:

前:/wp-content/uploads/2012/10/Moreton%2Bwindow.jpg

後:/wp-content/uploads/2012/10/Moreton_window.jpg

%2Bと の間は何度も出現する可能性があり/wp-content/uploads/2012/10/ます.jpg

これは私がこれまでに持っているものです:

(?<=\/wp-content\/uploads\/2012\/10\/.)(%2B)(?=.\.jpg)

交換された: _

しかし、それは機能していません。MySQLでこの置換を行います。

4

1 に答える 1

1

MySQL が正規表現ベースの文字列置換をサポートしているとは思えません — ドキュメントにはそのようなものはありません — しかし、次のような式を書くことができます:

CASE WHEN path_plus_filename REGEXP '^/wp-content/uploads/2012/10/.*[.]jpg$'
     THEN REPLACE(path_plus_filename, '%2B', '_')
     ELSE path_plus_filename
 END

これは を返しますが、すべてが一致する場合 (および場合のみ)にすべてをpath_plus_filename置き換えます。%2B_^/wp-content/uploads/2012/10/.*[.]jpg$

または、UPDATEクエリではなくステートメントが必要な場合は、次のように記述できます。

UPDATE table_that_contains_path_plus_filename_column
   SET path_plus_filename = REPLACE(path_plus_filename, '%2B', '_')
 WHERE path_plus_filename REGEXP '^/wp-content/uploads/2012/10/.*[.]jpg$'
;

追加するように編集:ちなみに、これはここでもそこでもありませんが、正規表現の問題は、%2B前に/wp-content/uploads/2012/10/+ちょうど1 文字、後ろにちょうど2 文字 +を付ける必要があることjpgです。許容される文字数にある程度の柔軟性を持たせるには、.*("0 個以上の文字") または.+("1 個以上の文字") または.{5,20}("5 から 20 文字の間") などを使用する必要があります。

于 2012-10-08T18:30:57.837 に答える