正则表达式没那么难

正则表达式没那么难

  1. [] 表示一位字符

    • [a] 表示字母a

      String regex = "[a]"
      
      System.out.println("a".matches(regex));//true
      
      System.out.println("aa".matches(regex));//false
      
      System.out.println("b".matches(regex)); //false
      
    • [abc] 表示包含abc中任意一位

      String regex = "[a]"
      
      System.out.println("a".matches(regex));//true
      
      System.out.println("aa".matches(regex));//false
      
      System.out.println("b".matches(regex)); //true
  2. ^为取非

    • [^a] 表示非a的字母

      String regex = "[^a]";
      
      System.out.println("a".matches(regex));//false
      
      System.out.println("aa".matches(regex));//false, 两位了,
      
      System.out.println("b".matches(regex)); //true
  3. -为区间连接符, 两头表示范围

    • a-z表示从a到z, 0-9 表示从0到9 A-Z表示A到Z

    • String regex = "[0-9]";
      
      System.out.println("a".matches(regex));//false
      
      System.out.println("1".matches(regex));//true
      
  4. . 表示任意字符

  5. 量词 ?, *, + {m,n}

    • ? 附加到某一位后面表示当前位出现一次或者一次也没有, 次数<=1

      String regex = "[0-9]?";
      
      System.out.println("1".matches(regex));//true
      System.out.println("".matches(regex));//true
      System.out.println("a".matches(regex));//false, 注意这个不算没出现
    • *表示出现次数大于等于0 次数>=0

      String regex = "[0-9]*";
      System.out.println("1".matches(regex));//true
      System.out.println("123".matches(regex));//true
      System.out.println("".matches(regex));//true
      System.out.println("a".matches(regex));//false, 注意这个不算没出现
    • +表示出现次数大于等于1 次数>=1

      String regex = "[0-9]+";
      System.out.println("1".matches(regex));//true
      System.out.println("123".matches(regex));//true
      System.out.println("".matches(regex));//false
      System.out.println("a".matches(regex));//false, 注意这个不算没出现
    • {m, n}

      String regex = "[0-9]{3,5}";
      System.out.println("1".matches(regex));//false
      System.out.println("12".matches(regex));//false
      System.out.println("123".matches(regex));//true
      System.out.println("12345".matches(regex));//true
      System.out.println("123456".matches(regex));//false
      
      //注意空号中参数可以使用一个,{n}表示有且仅有n个
      String regex = "[0-9]{3,5}";
      System.out.println("12".matches(regex));//false
      System.out.println("123".matches(regex));//true
      System.out.println("12345".matches(regex));//false
      
      //{n,}表示大于等于n
      String regex = "[0-9]{3}";
      System.out.println("12".matches(regex));//false
      System.out.println("123".matches(regex));//true
      System.out.println("12345".matches(regex));//true
      
  6. 常用字符标识

    • \d 表示0-9之间的数组相当于[0-9], \D表示非数字

      String regex = "\\d"; //第一个\为转义字符
      System.out.println("1".matches(regex));//true
      System.out.println("a".matches(regex));//false
      
      String regex = "\\D"; //第一个\为转义字符
      System.out.println("1".matches(regex));//false
      System.out.println("a".matches(regex));//true
    • \s 表示空白字符相当于 [ \t\n\x0B\f\r], 可以理解为看不到的都算是空白字符 \S相当于对\s取反

    • String regex = "\\s"; //第一个\为转义字符
      //空格
      System.out.println(" ".matches(regex));//true
      //回车
      System.out.println("\r".matches(regex));//true
      //换行
      System.out.println("\n".matches(regex));//true
      //无字符
      System.out.println("".matches(regex));//false
      System.out.println("a".matches(regex));//false
    • \w表示单词字符, 所有大小写字母,数字和下划线相当于[a-zA-Z_0-9], \W相当于\w取反

      String regex = "\\w"; //第一个\为转义字符
      //空格
      System.out.println(" ".matches(regex));//false
      //回车
      System.out.println("\r".matches(regex));//false
      System.out.println("a".matches(regex));//true
      System.out.println("1".matches(regex));//true
      System.out.println("_".matches(regex));//true
      System.out.println("#".matches(regex));//false
  7. 分组, 正则表达式中用()表示小组, 可以通过计算开括号来编号, 分好的组可以通过编号替代,第0组代表整个表达式,先看代码吧

    • String regex = "(h((a)(b)))\\1\\2\\3\\4";
      
      System.out.println("habhababab".matches(regex));//true

    解释上面的规则:

    首先表达式前面(h((a)(b)))表示 一个h, 一个a,一个b如果没有后面的数组部分怎 匹配记过就是 hab, 后面的数组\\n表示组数, 组数的规律是从左往右找开括号, 按照分组规律可以将表达式分为下面四组

    • 第一组 (h((a)(b))) 从第一个开括号开始到对应的闭括号结束
    • 第二组 ((a)(b)) 从第二个开括号开始, 到第二个闭括号结束
    • 第三组 (a)
    • 第四组 (b)

    所以对应的结果habhababab应该是 hab hab(第一组) ab(第二组) a(第三组)b(第四组)

至此, 正则的基本语法基本完毕, 下面来两个小练习,

  1. 用户名要求6-16位数字字母或下划线

    "\w{6,16}"
  2. 匹配出叠词

    "(.)\\1(.)\\2
  3. 匹配指定位数qq号码

    //6-9位数的qq号码
    "\d{6,9}"

好了今天的学习总结就到这里, 感兴趣的朋友可以参看这里 菜鸟教程 虽然有点像w3c但是感觉这个网站提供的小工具还是挺好用的, 鉴于笔者学疏才浅如有错误请在评论区指出, 以便互相促进技术的提升!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值