欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

java通过正则表达式提取字符串中的某一段字符串

时间:2023-06-09

​ 我们在编写程序中免不了要涉及到通过正则表达式找到该字符串中有用的一部分。

​ 那么既然可以通过正则表达式找到这一段字符串,可不可以再将这一段字符串给提取出来呢?答案是可以的。

​ 我们需要怎么去提取所匹配当前正则表达式的字符串呢?

​ 我们可以去使用jdk自带的工具类完成此操作,当然我们得模拟一个使用的场景来完成此次测试。

使用场景:使用阿里云的oss将图片上传之后,我们需要从oss中删除该图片,就必须得用到图片名称,因此需要将图片名称提取出来。这里我的图片存储是按照当天的年月日作为文件夹,使用uuid去除-,再加上之前的文件后缀名作为文件名来存储文件的

第一种方法:直接提取

public static String getFileNameFromUrl(String url){ // 编写正则表达式 String regFileName = "([0-9]+\/)+([a-zA-Z0-9]+)\.(jpg|png|jpeg)"; // 匹配当前正则表达式 Matcher matcher = Pattern.compile(regFileName).matcher(url); // 定义当前文件的文件名称 String fileName = ""; // 判断是否可以找到匹配正则表达式的字符 if (matcher.find()) { // 将匹配当前正则表达式的字符串即文件名称进行赋值 fileName = matcher.group(); } // 返回 return fileName;}

第二种方法:将不用的部分替换为空字符串

public static String getFileNameFromUrl(String url){ return url.replaceAll("^(http|https)\:\/\/([a-zA-Z\-]+\.)+(com|cn)\/", "") .replaceAll("\?([a-zA-Z]+\=[a-zA-Z0-9\.]+\&)+([a-zA-Z]+\=[a-zA-Z0-9\%]+)$", "");}

url一般的格式:https://wenzea.oss-cn-beijing.aliyuncs.com/2022/02/12/b0d3d337eea9485e82d84c5f16fabc9f.jpg?Expires=3599658873&OSSAccessKeyId=TMP.3KeAjOmPlD3MRVM6a5Qb9NwZTMvTgDiHt6PjZy6cVjJnK5HHHDLP4O9BDzgUBdYgTCyyjFFPOWNJ6gfln6zEBvabi416j&Signature=BhMCetPDgxdXpPFG3fxpsowg3SNzQ3D而提取出来的文件名称是:2022/02/12/b0d3d337eea9485e82d84c5f16fabc9f.jpg

可以看到,在测试方法中已经成功的将文件名称提取出来了。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。