我正在尝试用%2B
替换文件名中_
的所有出现。
例如:
之前:/wp-content/uploads/2012/10/Moreton%2Bwindow.jpg
之后:/wp-content/uploads/2012/10/Moreton_window.jpg
%2B
和/wp-content/uploads/2012/10/
之间可能会出现.jpg
次。{/ p>
这是我到目前为止所做的:
(?<=\/wp-content\/uploads\/2012\/10\/.)(%2B)(?=.\.jpg)
替换为:
_
但它不起作用。我将在MySQL中进行替换。
答案 0 :(得分: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/
加完全一个字符,然后完全两个字符加jpg
。为了在允许的字符数量方面获得一定的灵活性,您需要使用.*
(“零个或多个字符”)或.+
(“一个或多个字符”)或.{5,20}
(“五到二十个字符之间”)或诸如此类的东西。