我试图用%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/