1.字符
1) 在某个范围之内[ ]
1>直接将所有内容列出来
Pattern pattern = Pattern.compile("[asd]c");
Matcher matcher = pattern.matcher("ac");
System.out.println(matcher.find());
matcher = pattern.matcher("gc");
System.out.println(matcher.find()); 结果为:
true
false 2>如果内容有规律,可以使用“-”来表示范围 Pattern pattern = Pattern.compile("[a-z]m");
Matcher matcher = pattern.matcher("am");
System.out.println(matcher.find());
pattern = Pattern.compile("[1-8]c");
matcher = pattern.matcher("3c");
System.out.println(matcher.find()); 结果为:
true
true2) 取不在某个范围,即非,使用^ Pattern pattern = Pattern.compile("[^asd]c");
Matcher matcher = pattern.matcher("gc");
System.out.println(matcher.find());
matcher = pattern.matcher("ac");
System.out.println(matcher.find());
结果为:
true
false3)取在范围1,或者范围2,或者范围3中,即或,直接不写就是
Pattern pattern = Pattern.compile("[a-z1-5A-X]c");
Matcher matcher = pattern.matcher("gc");
System.out.println(matcher.find());
matcher = pattern.matcher("3c");
System.out.println(matcher.find()); 结果为:
true
true 注:还有另外一种写法[a-z[1-5[A-Z]]]c效果相同4) 取交集,使用&&
String s1 = "ac";
String s2 = "cc";
System.out.println(s1.matches("[a-z&&[b-e]]c"));
System.out.println(s2.matches("[a-z&&[b-e]]c")); 结果为:
false
true
2. 预定义字符类
产生原因:如果一直使用[a-z1-5]这样的正则表达式,会使阅读性降低,于是就使用几个专门的表达式用来表达一些特定的意思,如\d就表示0-9数字字符,等价于[0-9]
String s1 = "2";
String s2 = "c";
System.out.println(s1.matches("\\d"));
System.out.println(s2.matches("\\w")); 结果为:
true
true
3.量词
1)作用:就是为了说明字符或者字符串出现的次数
2)x? 匹配0次或1次(?表示是否,所以为0,1)
String str = "a";
System.out.println(str.matches("a?")); 结果为:true
3) x+ 匹配1次或多次(+表示正,所以为1或多次)
String str = "a";
System.out.println(str.matches("a+")); 结果为:true4) x* 匹配0次或多次(*表示所有,所以几次都行)
String str = "a";
System.out.println(str.matches("a*")); 结果为true
5) x{n} 匹配n次
String str = "aaa";
System.out.println(str.matches("a{3}")); 结果为true
6)x{n,} 匹配大于n次(联想[n,],相当于从n到正无穷)
String str = "aaa";
System.out.println(str.matches("a{2,}")); 7)x{n,m} 匹配大于n,小于m次(联想[n,m]) String str = "aaa";
System.out.println(str.matches("a{2,3}")); 8)注意:
1> [abc]+表示的是a一次或多次,或者b一次或多次,或者c一次或多次
String str = "a";
System.out.println(str.matches("[abc]+")); 2> abc+表示的是只针对c匹配一次或多次 String str = "abcc";
System.out.println(str.matches("abc+")); 结果为true3>( abc)+表示的是针对整个abc匹配一次或多次
String str = "abcabc";
System.out.println(str.matches("(abc)+")); 结果为true4>类似的,x{n},x{n,m},x{n,}也是如此匹配的
4.元字符
1)也就是有特殊意义的字符 2)所有元字符:([{\^-$|}])?*+.
3)将元字符改为普通意义的字符:前面加上\
5.边界判断
^行首 $行尾
String str = "aaaa";
System.out.println(str.matches("^a{2,}$")); 结果为true String str = " aaaa";
System.out.println(str.matches("^a{2,}$")); 结果为false String str = "aaaa ";
System.out.println(str.matches("^a{2,}$")); 结果为false7.使用
从一大段字符串中匹配需要的
String str = "345345ABC23423456ASD123";
Pattern p=Pattern.compile("[A-Z]{3}",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group());
} 结果为:ABC
ASD
335

被折叠的 条评论
为什么被折叠?



