JAVA-正则表达式

1、 java正则表达式包-regex

  package Day27;
  ​
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  ​
  public class Test {
      public static void main(String[] args) {
          //通过"模型"对象进行正则表达式约束,"hello"为正则表达式
          Pattern p=Pattern.compile("hello");
          //我们通过这个"模型"制造出一个匹配器,让他去和字符串匹配,
          //参数String就相当于被匹配的元素
          Matcher m=p.matcher("hello");
          //查看是否匹配成功,匹配成功返回true,否则返回false
          System.out.println("m----"+m.matches());
          //正则表达式是区分大小写的
          Matcher m1=p.matcher("Hello");
          System.out.println("m1----"+m1.matches());
      }
  }
  package Day27;
  ​
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  ​
  public class Test02 {
      public static void main(String[] args) {
          //通过"模型"对象进行正则表达式约束,"hello"为正则表达式
          //.通用字符,可以匹配所有的字符除了\n \r
          //*代表次数不限制,可以出现多次
          Pattern p=Pattern.compile("h.*llo");
          //我们通过这个"模型"制造出一个匹配器,让他去和字符串匹配,
          //参数String就相当于被匹配的元素
          Matcher m=p.matcher("hello");
          //查看是否匹配成功,匹配成功返回true,否则返回false
          System.out.println("m----"+m.matches());
          //.*能否匹配上空
          Matcher m1=p.matcher("hllo");
          System.out.println("m1----"+m1.matches());
          //.*能否匹配多次
          Matcher m2=p.matcher("hasfgsdfgbsdfgbllo");
          System.out.println("m2----"+m2.matches());
          //.*能否匹配上特殊字符
          Matcher m3=p.matcher("h@123\t2323llo");
          System.out.println("m3----"+m3.matches());
          //.*能否匹配上换行
          Matcher m4=p.matcher("h\rllo");
          System.out.println("m4----"+m4.matches());
          //正则表达式是区分大小写的
          Matcher m5=p.matcher("hAllo");
          System.out.println("m5----"+m5.matches());
      }
  }

2、 正则表达式

2.1、 直接写需要匹配的内容

如果你想匹配出java内容

 Pattern p=Pattern.compile("java");
  //可以匹配上
  Matcher m=p.matcher("java");
  //我们只能匹配上java
  System.out.println(m.matches());//ture
  ​
  Matcher m1=p.matcher("c++");
  System.out.println(m1.matches());//fales
         
  Matcher m2=p.matcher("Java");//这里false的原因是正则表达式是区分大小写的
  System.out.println(m2.matches());//false
  ​
  //扩展内容:请不要将我们之前学习的String类方法弄混
  String str="abcdejavafjhijavajkljavamjavan";
  str=str.replace("java","@");
  //此时str被替换,替换为
  //abcde@fjhi@jkl@n@n
  System.out.println(str);  

2.2、 字符组

[ ]

允许匹配一组可能出现的字符

 //只要是JAja([]中出现的字符)+ava的字符串都可以匹配上
  Pattern p=Pattern.compile("[JAja]ava");
  Matcher m1=p.matcher("java");
  Matcher m2=p.matcher("Aava");
  Matcher m3=p.matcher("aava");
  Matcher m4=p.matcher("Java");
  Matcher m5=p.matcher("Bava");
  Matcher m6=p.matcher("[JAja]ava");
  System.out.println(m1.matches());//ture
  System.out.println(m2.matches());//ture
  System.out.println(m3.matches());//ture
  System.out.println(m4.matches());//ture
  System.out.println(m5.matches());//false
  System.out.println(m6.matches());//false

2.3、 区间

[a-z]代表小写字母

[A-Z]代表大写字母

[0-9]代表全部数字,等同于\d

{0,3}代表出现0~3次

{3}代表必须正好出现3次

{3,}代表至少出现3次

+等同于{1,},代表至少出现1次

*等同于{0,},代表出现0或任意次

?等同于{0,1},代表出现0或1次

 
  Pattern p=Pattern.compile("[a-bA-Z0-9]ava");
  //小写字母匹配规则为a-b,只能是ab两个,java的j不在区间内,所以无法去展示
  Matcher m1=p.matcher("java");
  Matcher m2=p.matcher("Aava");
  Matcher m3=p.matcher("aava");
  Matcher m4=p.matcher("Java");
  Matcher m5=p.matcher("Bava");
  Matcher m6=p.matcher("9ava");
  Matcher m7=p.matcher("99ava");
  System.out.println(m1.matches());//false
  System.out.println(m2.matches());//ture
  System.out.println(m3.matches());//ture
  System.out.println(m4.matches());//ture
  System.out.println(m5.matches());//ture
  System.out.println(m6.matches());//ture
  System.out.println(m7.matches());//false

{0,3}代表出现0~3次

{3}代表必须正好出现3次

{3,}代表至少出现3次

  Pattern p=Pattern.compile("[a-bA-Z0-9]{0,3}");
  Matcher m1=p.matcher("");//t
  Matcher m2=p.matcher("abc");//t
  Matcher m3=p.matcher("9827");//f
  Matcher m4=p.matcher("Ab1");//t
  Matcher m5=p.matcher("!!");//f
  Matcher m6=p.matcher("你好");//f
  Matcher m7=p.matcher("___");//f
  System.out.println(m1.matches());//以下省略

2.4、 转义符

我们使用 \ 作为正则表达式的转义字符

由于java中 \ 本来就是转义字符的存在,所以要先将 \ 转义,才能正常转义

Pattern p=Pattern.compile("\\[JAja\\]ava");
  Matcher m1=p.matcher("java");//f
  Matcher m2=p.matcher("Aava");//f
  Matcher m3=p.matcher("aava");//f
  Matcher m4=p.matcher("Java");//f
  Matcher m5=p.matcher("Bava");//f
  Matcher m6=p.matcher("[JAja]ava");//t
  System.out.println(m1.matches());//以下省略

2.5、 取反

 
  //相当于将逻辑取反,但是我们依旧要注意我们的区间范围问题
  Pattern p=Pattern.compile("[^a-bA-Z0-9]{0,3}");
  Matcher m1=p.matcher("");//t
  Matcher m2=p.matcher("abc");//f
  Matcher m3=p.matcher("9827");//f
  Matcher m4=p.matcher("Ab1");//f
  Matcher m5=p.matcher("!!");//t
  Matcher m6=p.matcher("你好");//t
  Matcher m7=p.matcher("___");//t
  System.out.println(m1.matches());//以下省略

2.6、 \w \d \s与\W \D \S

\w 匹配任意单字符,等同于[_A-Za-z0-9]

\d 匹配任意数字[0-9]

\s 匹配空白字符,等价于[\n\r\f\t\v],注意曲中包含空格

大写字母等同于取反

\W 等同于^\w

\D 等同于^\d [^0-9]

\S 等同于^\s

  //\w代表了数组,大写字母,小写字母和下划线,\\d代表了数字
  //所以如果你写的是[\\w\\d]和[\\w]是一个效果
  Pattern p=Pattern.compile("[\\w]{0,3}");
  Matcher m1=p.matcher("");//t
  Matcher m2=p.matcher("abc");//t
  Matcher m3=p.matcher("9827");//f
  Matcher m4=p.matcher("Ab1");//t
  Matcher m5=p.matcher("!!");//f
  Matcher m6=p.matcher("你好");//f
  Matcher m7=p.matcher("___");//t
  System.out.println(m1.matches());//以下省略

2.7 \b表示字母的边界

什么是边界?\W就是边界[^a-zA-Z0-9]

.为全部匹配

*为可以出现很多或者不出现

?则可带可选字符,可以出现或不出现

如果一个单词前后出现了\b说明必须存在边界,否则无法匹配

  Pattern p=Pattern.compile(".*(\\bjava\\b).*");
  Matcher m1=p.matcher("");//f
  Matcher m2=p.matcher("java");//t
  Matcher m3=p.matcher("abjava");//f
  Matcher m4=p.matcher("ab java c");//t
  Matcher m5=p.matcher("ab+java+c");//f
  Matcher m6=p.matcher("ab_java_c");//f
  System.out.println(m1.matches());//以下省略

2.8 开始与结束

^表示开始,^ xxxx(不在[ ]内)表示以xxxx开头

$表示结束,yyyy$,表示以yyyy结尾

  
  System.out.println("aabcd".replaceAll("aa","你好"));//你好bcd
  System.out.println("aabcd".replaceAll("^aa","你好"));//你好bcd
  System.out.println("aabcd".replaceAll("aa","你好"));//你好bcd
  System.out.println("abacd".replaceAll("^aa","你好"));//abacd
  System.out.println("baaaa".replaceAll("aa","你好"));//b你好你好
  System.out.println("baaaa".replaceAll("aa$","你好"));//baa你好
  System.out.println("baacd".replaceAll("cd","你好"));//baa你好
  System.out.println("baacd".replaceAll("cd$","你好"));//baa你好

3、 分组

3.1、 使用()进行分组

  //我们使用()进行分组,分组后
  //group方法参数如果不传递,则会将匹配的字符串全部返回
  //如果传递1会返回分组内容
  Pattern p=Pattern.compile("h(\\d*).*llo");
  System.out.println(p.pattern());//输出正则表达式字符串“h\w*llo”
  Matcher matcher=p.matcher("h123456ello");
  if(matcher.matches()){
      System.out.println(matcher.group(1));//输出匹配结果
  }

3.2、 命名分组

  //我们使用名称进行分组
  //使用?+<name>的方法进行分组
  //group方法参数如果不传递,则会将匹配上的字符串全部返回
  //如果传递对应名称会返回分组内容
  Pattern p=Pattern.compile("h(?<test>\\d*)(?<test1>.*)llo");
  System.out.println(p.pattern());
  Matcher matcher=p.matcher("h123456e123wello");
  if(matcher.matches()){
      System.out.println(matcher.group("test"));//输出匹配结果_123456
      System.out.println(matcher.group("test1"));//输出匹配结果_e13we
  }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值