使用UWC迁移MediaWiki至Confluence时Java正则匹配带thumb图片失败求助
解决MediaWiki图片链接转换的Java正则方案
没问题,我来帮你搞定这个正则表达式的需求!咱们一步步拆解,确保精准匹配并转换你要的格式。
需求回顾
你需要把这种格式的MediaWiki嵌入图片:
[[file:send-rec.jpg|thumb|none]]
转换成:
!send-rec.jpg!
而且只处理jpg、gif、bmp、png这几种格式的图片。
正则表达式写法
针对这个场景,我们可以用下面的正则(Java里要注意转义特殊字符):
String regex = "\\[\\[file:([a-zA-Z0-9_-]+\\.(jpg|gif|bmp|png))\\|thumb\\|none\\]\\]";
正则各部分解释:
\\[\\[file::匹配开头的[[file:,因为[是正则的特殊字符,所以必须用\\转义。([a-zA-Z0-9_-]+\\.(jpg|gif|bmp|png)):这是核心的捕获组,用来提取我们需要的文件名:[a-zA-Z0-9_-]+:匹配文件名的主体部分,允许字母、数字、下划线和连字符(如果你的文件名里有空格或其他特殊字符,可以把它们加到这个字符集里,比如改成[a-zA-Z0-9_\\- ])。\\.:匹配文件名里的点号,同样需要转义。(jpg|gif|bmp|png):限定只匹配指定的四种图片格式。
\\|thumb\\|none\\]\\]:匹配结尾的|thumb|none]],|和]都是特殊字符,必须转义。
Java代码示例
直接用String.replaceAll()就能快速完成替换,如果你需要支持大小写不敏感的扩展名(比如JPG、Gif),可以用Pattern和Matcher来实现:
基础版本(区分大小写)
String input = "[[file:send-rec.jpg|thumb|none]]"; String regex = "\\[\\[file:([a-zA-Z0-9_-]+\\.(jpg|gif|bmp|png))\\|thumb\\|none\\]\\]"; String output = input.replaceAll(regex, "!$1!"); System.out.println(output); // 输出:!send-rec.jpg!
大小写不敏感版本
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MediaWikiImageConverter { public static void main(String[] args) { String input = "[[file:photo.JPG|thumb|none]] [[file:anim.Gif|thumb|none]]"; String regex = "\\[\\[file:([a-zA-Z0-9_-]+\\.(jpg|gif|bmp|png))\\|thumb\\|none\\]\\]"; Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); String output = matcher.replaceAll("!$1!"); System.out.println(output); // 输出:!photo.JPG! !anim.Gif! } }
测试边界情况
如果你的文本里有多个图片链接,或者夹杂其他内容,这个正则也能精准匹配:
输入:"这是一张测试图[[file:test-bmp.bmp|thumb|none]],旁边还有[[file:logo.png|thumb|none]]"
输出:"这是一张测试图!test-bmp.bmp!,旁边还有!logo.png!"
内容的提问来源于stack exchange,提问作者droidian
相关产品推荐
相关产品推荐

