2021-07-25正则表达式

正则表达式

  • 正则表达式 : 定义了字符串的匹配模式

  • 可以用来搜索,编辑或处理文本,并不仅限于某一种语言,但是每种语言中有细微的差别

  • JDK1.4 推出的 java.util.regex 包,很好的支持了正则表达式

  • 常用语法 :

  • \ 转移符 , 把有意义字符转换为无意义字符

  • 但是java中 \ 也是转移符,所以在java中编写正则表达式的时候,需要转移符的时候需要些 两个 \

  • 字符取值范围相关

  • [abc] : 表示 可能是a, 也可能是b, 也可能是c (是abc中的任意一个)

  • [^abc] : 表示不是a,b,c中的任何一个

  • [a-zA-Z] : 表示是大小写字母 , [a-z] 小写字母 , [A-Z] 大写字母 [0-9] 数字0-9

  • [a-zA-Z0-9] : 表示是数字或字母

  • 简洁表示

  • . : 匹配任意字符

  • \d : 表示数字 等同于[0-9]

  • \D : 表示非数字 等同于 [^0-9]

  • \s : 表示由空字符组成, [\t\n\r\x\f]

  • \S : 表示非空字符组成

  • \w : 表示由字母数字下划线组成 [a-zA-Z0-9_]

  • \W : 表示非字母数字下划线 [^a-zA-Z0-9_]

  • 表示数量的

  • ? : 表示出现0次或1次

  • +: 表示1次或多次, 大于等于1
    
  • * : 任意次数(0~N)
    
  • {n} : 表示出现n次 , {2} 表示出现2次

  • {n,m} : 表示出现n次到m次 , {2,5} : 表示出现2~5次

  • {n,} : 表示出现n及以上 >=n

  • () : 把他们看做一个整体

  • | 或 , a|b ,a和b都可以匹配

  • ^ : 以什么什么打头 , 但是 用在[^xxxx] 就表示取反

  • $ : 以什么什么结尾

  • a[a-z] , a1 , aA , a3, 22

  • 校验非汉字

  • [^\u4e00-\u9fa5]

  • Pattern : 创建正则表达式对象,能做一些基本的简单操作

  • 三大功能 :

  • 验证 : boolean matchers(String regex);

  • 拆分 : String[] split(String regex);

  • 替换 : String replaceAll(String regex,String replacement);

  • 实际操作中,有时候我们嫌麻烦,也可以直接使用String里面的一些方法,比如 替换,拆分,验证String类中也有的

public static void main(String[] args) {
        // test_01();
        test_02();
    }
    // 验证 : boolean matchers(String regex);
    public static void test_02() {
        String regex = "(-)?\\d+(\\.\\d+)?";
        String str = "2.43";
        // 全词匹配
        boolean flag = Pattern.matches(regex, str);
        System.out.println(flag);

        // String类中的用法,也是全词匹配
        System.out.println(str.matches(regex));
    }
    // 拆分 String[] split(String regex);
    public static void test_01(){
        String str = "1,2@3!4";
        // 创建正则表达式对象
        Pattern pattern = Pattern.compile("[^0-9]");
        String[] strArray = pattern.split(str);
        for (String string : strArray) {
            System.out.println(string);
        }
        // String的
        String[] strArray1 = str.split("[^0-9]");
        for (String string : strArray1) {
            System.out.println(string);
        }
    }
public static void main(String[] args) {
        String regex = "\\d{11}";
        String tel = "a131131131112";
        // 引擎
        Pattern pattern = Pattern.compile(regex);
        // 匹配器
        Matcher matcher = pattern.matcher(tel);
        // 三种匹配模式
        // matches : 全词匹配   xxx
        // find : 任意位置均可   .*xxx.*
        // lookingAt : 从前到后    xxx.*

        // 全词匹配 , 等于写着 ^ 和 $
        System.out.println(matcher.matches());
        // 注意 : 一个匹配器对象(matcher) ,调用相同的方法可以连用,不建议混用

        matcher = pattern.matcher(tel);
        // 只要最前面的是符合条件的 就行
        System.out.println(matcher.lookingAt());

        matcher = pattern.matcher(tel);
        // 任意位置符合条件 就行
        System.out.println(matcher.find());
    }
//数据提取

public static void main(String[] args) {
        // 可以使用() 对匹配到的数据进行分组, 第一个() 就是第一组,第二个() 就是第二组
        // 也可以不分组,如果不分组的情况下做数据提取,就只能提取到整个匹配到的字符串
        // 分组之后 可以提取对应组的数据
        // ((.{2,3})电话号码是) 第一组
        // (.{2,3}) 第二组
        // (\\d{11}) 第三组
        String string = "张三电话号码是13113113111张三四电话号码是13113113112张三五电话号码是13113113113张四电话号码是13113113114王五电话号码是13113113115赵六电话号码是13113113333孙小黑电话号码是13113113211小红电话号码是13113113311";
        String regex = "((.{2,3})电话号码是)(\\d{11})";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(string);

        // find 匹配任意位置,匹配到一个之后就停止
        // 如果接着调用find方法,就会接着刚停止的地方继续向后面匹配
        while (matcher.find()) {
            // 所以 结合find特性,可以和group连用,做到数据提取
            // group : 0或者无参, 获取匹配到的整个数据,1 就是第一组,2就是第二组
            // 一个小括号 就是一组
            System.out.println(matcher.group(2) + " : " + matcher.group(3));
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值