我试图用%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中进行替换。

最佳答案

我不相信MySQL支持基于regex的字符串替换,我在文档中也没有看到类似的内容,但是您可以编写这样的表达式:

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$'
;

编辑后添加:顺便说一下,这里和那里都没有,但是-regex的问题是它要求%2B前面加上/wp-content/uploads/2012/10/加上一个字符,后面加上jpg两个字符。为了获得允许的字符数的灵活性,您需要使用.*(“零或多个字符”)或.+(“一个或多个字符”)或.{5,20}(“五到二十个字符”)或“不”。

关于mysql - 正则表达式用文件名中的下划线替换%2B,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12787322/

10-12 02:40