java 正则 s_正则表达式-java

1.用正则表达式心里得有两个东西的概念。第一是字符串(String),即正则表示式合作的对象。第二,正则,即需要根据规则,写一个符合条件的正则。

2.查看API

f0e8ab307bb0b9211c3061444b2588fe.png

3.字符类(Character classes)

(1)[ab] :有两个条件,第一是字符串中有满足a或b的字符,第二是字符串只能是一个字符

String regex="[abc]";

String a="a";

String a1="b";

String a2="abc";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

(2)[^ab]:有两个条件,第一是含有除了a,b之外的字符,第二是字符串只能是一个字符

String regex="[^abc]";

String a="dd";

String a1="d";

String a2="b";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

(3)[A-Z]:有两个条件,第一是字符串只能是一个字符,第二是大写字母A-Z中的一个

String regex="[A-Z]";

String a="GG";

String a1="D";

String a2="3";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

[a-z]:有两个条件,第一是字符串只能是一个字符,第二是小写字母a-z中的一个

String regex="[a-z]";

String a="dd";

String a1="d";

String a2="A";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

String regex="[a-zA-Z]";

String a="a";

String a1="D";

String a2="A";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

String regex="[A-Za-z]";

String a="a";

String a1="D";

String a2="A";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

String regex="[A-z]";

String a="a";

String a1="D";

String a2="A";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

String regex="[a-f]";

String a="a";

String a1="B";

String a2="g";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true false false

String regex="[a-fh-m]";

String a="a";

String a1="l";

String a2="g";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

String regex="[a-fk]";

String a="a";

String a1="l";

String a2="k";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true false true

(4)[A-Z[a-z]]:第一总的输出结果还是只能是一个字符,第二该字符串可以是A-Z或者a-z的任意一个字符

String regex="[a-f[h-m]]";

String a="a";

String a1="l";

String a2="g";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

(5)[ab&&b]:第一是字符串只能是一个字符,第二该结果是&&两边的交集。

String regex="[acb&&bc]";

String a="a";

String a1="b";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true true

这个复杂的问题可以画数轴线来判断

4.Predefined character classes(预定义字符类)

(1).(点):第一,表示任意字符,不是字面上的点(这样就不能用来判读只能有点的字符串了)(但是在[]里面点就只是字面量了)

第二,一个点表示一个字符。如果有两个点,那么字符串必须是两个

String regex=".";

String a=".";

String a1="b";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

String regex="[.d]";

String a=".";

String a1="d";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

String regex="..";

String a=".";

String a1="dd";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

(2)\.:表示符合.的字符串(在这里\只是一个字符的存在,但是在字符串里\是作为转义字符,我们需要的不是转义字符,所以写的时候需要两个\\)

String regex="\\.";

String a=".";

String a1="dd";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true false false

(3)\d:跟[0-9]相同

String regex="\\d";

String a="10";

String a1="4";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

(4)\D:跟[^0-9]相同(注意也只能是一个字符)

String regex="\\D";

String a="10";

String a1="4";

String a2="c";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false false true

(5)\s:表示一个字符;表示一个空字符;tab也是一个空白字符

String regex="\\s";

String a="";

String a1=" ";

String a2=" ";//tab

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true true

(6)\S:跟[^\s]等价

String regex="\\S";

String a="s";

String a1=" ";

String a2="2";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");

//true false true

(7)\w:等价于[a-zA-Z_0-9]

String regex="\\w";

String a="d";

String a1="_";

String a2="2";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

(8)\W:[^\w]

String regex="\\W";

String a="d";

String a1="_";

String a2="*";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

5.Greedy quantifiers(数量词)

(1)?:表示满足条件或者字符串为空

String regex="[ab]?";

String a="";

String a1="a";

String a2="d";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

(2)*:表示没有也可以,有也可以,有多个也可以

String regex="[ab]*";

String a="";

String a1="aa";

String a2="d";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

(3)+:一次或多次

String regex="[ab]+";

String a="";

String a1="aa";

String a2="d";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true false

(4){n}:就规定有n次(出现的字符只要满足要求,不规定必须出现的是同一个字符)

String regex="[ab]{3}";

String a="abb";

String a1="aaa";

String a2="aaab";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true false

(5){n,}:至少n次

String regex="[ab]{3,}";

String a="abb";

String a1="aaa";

String a2="aaab";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//true true true

(6){m,n}:包含m,n在内的次数范围

String regex="[ab]{3,4}";

String a="ab";

String a1="aaa";

String a2="aaab";

System.out.print(a.matches(regex)+" ");

System.out.print(a1.matches(regex)+" ");

System.out.print(a2.matches(regex)+" ");//false true true

6.拆分字符串

ea7e06de571dbccecd0ba5c5b705dc64.png

(1)根据空字符串拆分字符串

String a="my name is sun";

String [] arr=a.split(" ");for(int i=0;i

System.out.println(arr[i]);

}/*my

name

is

sun*/

(2)根据点来拆分

String a="my.name.is.sun";

String [] arr=a.split("\\.");for(int i=0;i

System.out.println(arr[i]);

}/** my

name

is

sun*/

String a="my.name.is.sun";

String [] arr=a.split(".");for(int i=0;i

System.out.println(arr[i]);

} //表示里面的每一个字符都被消去,所以最后是什么都没有

7.排序字符串(需要将字符串切割成数组才能排序)

String a="12 45 56 78 5 8 10";

String b[]=a.split(" ");int arr[] =new int[b.length];for(int i=0;i

arr[i]=Integer.parseInt(b[i]);

}

Arrays.sort(arr);

String atr="";for(int i=0;i

atr=atr+arr[i];else atr=atr+arr[i]+" ";

}

System.out.println(atr);//5 8 10 12 45 56 78

8.替换功能

String s="ef43vft65";

String m=s.replaceAll("\\d", "");

System.out.println(m);//efvft

9.组(分组就是针对重复的字符的解决办法)(就是一个字符同时出现多少次的方法,上面都没提到)

String regex="(...)\\1";

String a="&*(&*(";

System.out.println(a.matches(regex));

String regex="(.)\\1+";

String a="asssdfflgggm";

String[] b=a.split(regex);for(int i=0;i

System.out.println(b[i]);/*a

d

l

m*/

String regex="\\.";

String a="m...m..yy..nnaa..mme..iiiss.sun.";

String m=a.replaceAll(regex,"").replaceAll("(.)\\1+", "$1");

System.out.println(m);

//mynameisun

出现几个点本来就要出现几个字符,然后用括号标志起来就成为一个整体,看作一个字符,不能拆分,然后后面说重复一次,字符个数就翻一倍,而且前后两组都应该相同。

10.在一个字符串里获取我们需要的一定规则的字符串(也就是我们的正则的对象是在一个字符串里面,不是整个字符串)

String regex="(..)\\1+";

Pattern p=Pattern.compile(regex);

Matcher m=p.matcher("每天我都是欢喜欢喜的,我很开心");

m.find();

System.out.println(m.group());//欢喜欢喜

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值