关键词搜索

源码搜索 ×
×

正则表达式在java中的应用

发布2021-08-15浏览461次

详情内容

本文介绍正则表达式在java中的一些应用:

1)判断字符串中是否含有指定子字符串
2)捕获字符串中匹配的子字符串
3)替换字符串中指定的子字符串
4)根据不同情况动态替换字符串中的匹配的子字符串

1、判断字符串中是否含有指定子字符串

import java.util.regex.Matcher;
import java.util.regex.Pattern;

private String checkVideo(String path){
    String video = ".mp4|.mov|.flv|.avi";
    Pattern r = Pattern.compile(video,Pattern.CASE_INSENSITIVE);//忽略大小写
    Matcher m = r.matcher(path);
    return (m.find()) ? "视频" : "";
}	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、捕获字符串中匹配的子字符串
1)普通捕获

//sIds = "1,2,45,6,36"
List<Integer> rainIds = new ArrayList<Integer>();

Pattern r = Pattern.compile("\\d+");
Matcher m = r.matcher(sIds);
while (m.find()) {
    String d = m.group();//d就是要寻找的对象
	...
}

return rainIds;//得到整型数组:[1,2,45,6,36]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2)捕获分组?

private String getTimeStr(String filename){
    String pattern = "(?<t>\\d{12})_\\d_\\d\\.";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(filename);
    return (m.find()) ? m.group("t") : "";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、替换字符串中指定的子字符串

替换,直接使用正则表达式,无须构造正则对象

String pattern = "https*\\://";
String localImageUrl = imgPathLocal + url.replaceAll(pattern,"/").replaceAll("/", "\\\\");
  • 1
  • 2

4、根据不同情况动态替换字符串中的匹配的子字符串
3这个替换,是指定好替换内容。但有时,替换内容要根据具体情况,不能预先指定。java这个我暂时找不到代码,先用c#的来示范一下,说明有这个东东。我相信java也有类似的功能,以后找到再替换。

Regex rx = new Regex(@"\s{2,}|(?<ordernum>\d{1,2}[.、])\s*", RegexOptions.Compiled | RegexOptions.IgnoreCase);

//将正则表达式捕获的分组内容修改后再替换,即符合条件的内容会稍加修改,加个东西或啥的
content = rx.Replace(content, new MatchEvaluator(CapOrderNum));

private string CapOrderNum(Match m)
{//返回修改后的正则表达式捕获的分组内容
    return "<br/><br/>" + ((m.Result("${ordernum}") != null) ? m.Result("${ordernum}") : "");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2021.10.18
java有字符编码的问题,有时会出现含汉字的字符串,无法匹配正则表达式的问题。这时可以参考如下做法:

    String getAction(String tpl) {
        String action = "";

        String pattern = "\\>,[\\s\\S]+";
        Pattern r = Pattern.compile(pattern);
        Matcher m = null;
        try {
        	//不管3721,先将字符串转为"utf-8"编码
            m = r.matcher(new String(tpl.getBytes(), "utf-8"));
            if (m.find()) {
                action = m.group();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return action;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载