正则表达式用文件名中的下划线替换%2B

时间:2012-10-08 18:23:33

标签: mysql regex replace

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

1 个答案:

答案 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} (“五到二十个字符之间”)或诸如此类的东西。