正则表达式正则表达式描述了一种字符串匹配模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或从某个串中取出符合某个条件的子串等。
普通字符
- [abc]
匹配[…]中的字符的一个
String s="8";
String pattern="[789]";//表示匹配789中的一个
System.out.println(s.matches(pattern));
结果:
true
- [^abc]
匹配除了[…]中字符的所有字符
String s="G";
String pattern="[^abc]";// 匹配字母abc以外的字符
System.out.println(s.matches(pattern));
结果:
true
- [a-z]
表示一个区间
[0-9]匹配数字中的一个
[a-z]匹配小写字母中的一个
[A-Z]匹配大写字母中的一个
[a-zA-Z]匹配大小写字母中的一个
[0-9a-zA-Z]数字字母中的一个
String s="8";
String pattern="[0-9a-zA-Z]";
System.out.println(s.matches(pattern));
结果:
true
- .
匹配除换行符(\n、\r)之外的任何单个字符,相当于[^\n\r]。
String s="a";
String pattern=".";
System.out.println(s.matches(pattern));
结果:
true
- \w
匹配字母数字下划线,相当于[0-9a-zA-Z_]
String s="*";
String pattern="\\w";
System.out.println(s.matches(pattern));
结果:
false
- 其他
\^ 匹配^本身
\$匹配$本身
.匹配.本身
String partten1="\\^";
String partten2="\\$";
String partten3="\\.";
String s1="^";
String s2="$";
String s3=".";
System.out.println(s1.matches(partten1));
System.out.println(s2.matches(partten2));
System.out.println(s3.matches(partten3));
结果:
true
true
true
限定符
- *
匹配前面的子表达式 零次或多次
String str="";
String str2="86857646";
String partten1="[1-9]*";
System.out.println(str.matches(partten1));
System.out.println(str2.matches(partten1));
true
true
- +
匹配前面的子表达式 一次或多次
String s="";
String s1="0";
String s2="0bjwu";
String partten="[0-9a-z]+";
System.out.println(s.matches(partten));
System.out.println(s1.matches(partten));
System.out.println(s2.matches(partten));
false
true
true
- ?
匹配前面的子表达式 零次或一次
String s1="";
String s2="0";
String s3="0u";
String partten="[0-9a-z]?";
System.out.println(s1.matches(partten));
System.out.println(s2.matches(partten));
System.out.println(s3.matches(partten));
true
true
false
- {n}
匹配前面的子表达式 n次
String s1="hsdg";
String s2="ghfv67";
String partten="[0-9a-zA-Z]{6}";
System.out.println(s1.matches(partten));
System.out.println(s2.matches(partten));
false
true
- {n,}
至少匹配n次
String s1="1";
String s2="1h";
String s3="sg3";
String partten="[0-9a-zA-Z]{2,}";
System.out.println(s1.matches(partten));
System.out.println(s2.matches(partten));
System.out.println(s3.matches(partten));
false
true
true
- {m,n}
最少匹配n次,最多匹配m次
String s1="76";
String s2="67v";
String s3="ftyg";
String s4="1234567";
String partten="[0-9A-Za-z]{3,7}";
System.out.println(s1.matches(partten));
System.out.println(s2.matches(partten));
System.out.println(s3.matches(partten));
System.out.println(s4.matches(partten));
false
true
true
true
特殊符号
- [0-9]|[]a-z]
左右两边表达式“或”关系,匹配左边或右边
String a="a";
String partten="[0-9]|[a-z]";
System.out.println(a.matches(partten));
true
- ()
括号中的内容表示一个整体
小练习
匹配身份证号码
String s="610121200103203706";
String pattern="[1-9][0-9]{16}[0-9Xx]";
System.out.println(s.matches(pattern));
true
匹配年龄为18-65岁
String s="19";
String partten="(1[8-9])|([2-5][0-9])|(6[0-5])";
System.out.println(s.matches(partten));
true
去空格
String s="vdufv vhdh dfub djfb ";
String pattern="[ ]";
String s1=s.replaceAll(pattern,"");
System.out.println(s1);
vdufvvhdhdfubdjfb
按照同样的方法可以去数字,去字母
去除标签字符串
String s="<h1>这是测试结果</h1><p>test a</p>";
String partten="<[/]?h1>|<[/]?p>";
System.out.println(s.replaceAll(partten, ""));
这是测试结果test a