正则表达式替换数据表里字段包含<img src=““>内的路径地址

//原始字段数据其中包含<img src="/web/A02024092033333.JPG"> 替换为<img src="/web/A0202409/A020240920/A02024092033333.JPG">
@PostMapping("xxx")
    public ResultVo<?> xxx(@RequestParam String channelCode){//是通过对应栏目编码来进行替换
        ContentDetail contentDetail = contentDetailService.findByChannelCode(channelCode);
        String content = contentDetail.getContent();//找到对应的字段
        Pattern pattern = Pattern.compile("<img\\s+[^>]*src=\"([^\"]+)\"");//使用正则表达式创建一个Pattern对象。这个正则表达式用于匹配<img>标签,并捕获其src属性的值。
        Matcher matcher = pattern.matcher(content);//创建一个Matcher对象,用于在给定的content字符串中查找与上述正则表达式匹配的内容。
        StringBuffer updatedContent = new StringBuffer();
        while (matcher.find()) {//在content中查找下一个匹配的<img>标签,循环执行直到没有匹配项。
                String src = matcher.group(1);//从当前匹配的内容中提取src属性的值(这是正则表达式中第一个捕获组([^\"]+))。
                String newSrc = src; // 默认新的src为原始src
if (src.startsWith("/web") || src.startsWith("/wweb")) {
                String filename = src.substring(src.lastIndexOf('/') + 1);//从src中提取文件名,方法是找到最后一个/的位置,并从此位置开始截取字符串。
                String base = filename.substring(0, filename.lastIndexOf('.'));//获取文件名的基础部分,去掉扩展名(例如.JPG)。这是通过找到最后一个.的位置并进行截取来实现的。
                // 如果src符合特定格式,进行拆分
                if (src.matches(".*/W\\d+\\.JPG")) {检查src是否符合特定格式,即是否包含以W开头,后跟10个数字并以.JPG结尾的文件名。
                    String part1 = base.substring(0, 7); // 这块我是截取的前7位为二级目录
                    String part2 = base.substring(0, 9); // 前9位为三级目录
                    newSrc  = "/" + part1 + "/" + part2 + "/" + filename;//生成新的src路径,将其构造为/part1/part2/filename的形式。
                    System.out.println("newSrc:"+newSrc);
                }
           }
            // 替换原始src为新的src
            matcher.appendReplacement(updatedContent, matcher.group(0).replace(src, newSrc));
        }
        matcher.appendTail(updatedContent); // 添加未匹配部分
        // 更新contentDetail的content
        contentDetail.setContent(updatedContent.toString());
        contentDetailService.updateById(contentDetail); // 更新数据库或持久化
        // 返回结果
        return ResultVo.success(updatedContent.toString());
    }
正则表达式:
"<img\\s+[^>]*src=\"([^\"]+)\"":
<img:匹配以<img开头的字符串。
\\s+:匹配一个或多个空格(可能的空白字符)。
[^>]*:匹配任意数量的非>字符,代表其他可能的属性。
src=\"([^\"]+)\":
src=\":匹配src="部分。
([^\"]+):捕获组,用于提取src属性中的值(即双引号之间的内容)。
\":匹配关闭的双引号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WAZYY0619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值