正则表达式

31 篇文章 0 订阅

目录

 

常规匹配:

选择匹配 (|)

限定符(+,*,{},?)

定位符(^,$,\\b,\B)

分组匹配

非捕获分组


 

常规匹配:

        String regStr = "abc";        //默认区分大小写
        String regStr = "(?i)abc";    //不区分大小写01:abc均不区分
        String regStr = "a(?i)bc";    //不区分大小写02:bc不区分
        String regStr = "a((?i)b)c";  //不区分大小写03:b不区分
        String regStr = "[1-9]";      //匹配1-9,随意数字
        
        String regStr = "[^a-z]";     //匹配不是a-z之间的字符  (区分大小写,若要不区分大小写,即将A-Z也过滤,则使用不区分大小写04)
        Pattern pattern = Pattern.compile(regStr02,Pattern.CASE_INSENSITIVE);  // 不区分大小写04  INSENSITIVE:不敏感
        
        String regStr = "[^1-9]{2}";  //匹配不是1-9之间的连续两个数字
        String regStr = "[abcd]";     //匹配abcd中的任意一个字符
        String regStr = "\\D";        //匹配不在 0-9 的任意一个字符 ,相当于 "[^0-9]"
        String regStr = "\\w";        //匹配 大小写英文字母, 数字,下划线,相当于"[a-zA-Z0-9]"
        String regStr = "\\W";        //匹配 等价于 [^a-zA-Z0-9_],相当于\\w取反
        String regStr = "\\s";          //匹配任何空白字符(空格,制表符等)
        String regStr = "\\S";          //匹配任何非空字符
        String regStr = ".";            //匹配除 \n 之外的所有字符,如果要匹配,本身则需要使用\\ 

 

选择匹配 (|)

 public void select_match() {
        String content = "魈、肖、万叶、钟离、神里绫人";

        String regStr = "魈|肖";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
        }
    }

 

限定符(+,*,{},?)

        String regStr = "(abc)*";      //匹配任意几个连续的abc(0个或多个,每位不是abc的位置都有0个abc)
        String regStr = "z + (abc)*";  //匹配z后接任意个数的abc
        String regStr = "z + abc?";    //匹配z后接ab或abc的字符串
        String regStr = "[abcd]{3}";   //匹配任意abcd中长度为3的字符串
        String regStr = "[abcd]{3,}";  //匹配任意abcd中长度不小于3的字符串
        String regStr = "[abcd]{3,5}"; //匹配任意abcd中长度不小于3,不大于5的字符串
        String regStr = "\\d{2}";      //表示匹配 两位的任意数字字符

        //细节:java 匹配默认贪婪匹配,即尽可能匹配多的(即优先以最长长度的形式输出)
        String regStr = "a{3,4}";      //表示匹配 两位的任意数字字符
        String regStr = "\\d{2,5}";    //匹配 2 位数或者 3位,4位,5位
        String regStr = "1+";          //匹配一个 1 或者多个 1
        String regStr = "\\d+";        //匹配一个数字或者多个数字
        String regStr = "1*"; //匹配 0 个 1 或者多个 1

        //演示?的使用, 遵守贪婪匹配
        String regStr = "a1?"; //匹配 a 或者 a1

        //非贪婪匹配
        String regStr = "\\d+?";

定位符(^,$,\\b,\B)

        String regStr = "^[0-9]+[a-z]*";      //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(有或无)
        String regStr = "^[0-9]+[a-z]+$";     //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(必须是a-z结尾)
        String regStr = "^[0-9]+\\-[a-z]+$";  //匹配以0-9任意几个数字开头,以a-z任意小写字母结尾(必须是a-z结尾),同时中间必须有 “ - “
        String regStr = "han\\b";             //表示匹配边界(字符串的最后,和有空格间隔的字串最后)的han
        String regStr = "han\\B";               //与\\b相反

分组匹配

 public void capture() {
        String content = "hjvhbjhv s7789 nn1189jhvjh";
        //注:
        //matcher.group(0)得到匹配字符串的全部内容
        //matcher.group(1)得到匹配字符串的第1组内容
        //matcher.group(2)得到匹配字符串的第2组内容

        //未命名分组
//        String regStr = "(\\d\\d)(\\d\\d)";

        //命名分组
        String regStr ="((?<g1>\\d\\d)(?<g2>\\d\\d))";


        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0) +
                    "   第一个分组内容" + matcher.group(1) +
                    "   第一个分组内容(命名分组)" + matcher.group("g1") +
                    "   第二个分组内容" + matcher.group(2) +
                    "   第二个分组内容(命名分组)" + matcher.group("g2") );
        }
    }

非捕获分组

        String regStr = "xx同学|xx姐姐|xx老师";
        String regStr = "xx(?:同学|姐姐|老师)";  //查找后缀为同学、姐姐或老师的xx
        String regStr = "xx(?=同学|姐姐)";   //查找后缀为同学、姐姐的xx
        String regStr = "xx(?!同学|姐姐)";   //查找除了后缀为同学、姐姐的xx(即?=取反)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值