1

我正在尝试将所有出现的%2Bin 文件名替换为_.

例如:

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

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

%2Bbetween/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,但用%2Bif _(且仅当)整个事物匹配时替换 every ^/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/加上正好一个字符,后面正好是两个字符加上jpg。要在允许的字符数方面获得一定的灵活性,您需要使用.*(“零个或多个字符”) 或.+(“一个或多个字符”) 或.{5,20}(“五个到二十个字符”) 或诸如此类。

于 2012-10-08T18:30:57.837 回答