1.正则表达式(核心)
范例:要求判断一个字符串是否由数字组成思路:将字符串变为字符数组,而后每个字符进行依次判断。
package classkua;
public class Test {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
String num="2345";
System.out.println(isNumber(num));
}
public static boolean isNumber(String str) {
char[] data=str.toCharArray();
for(int x=0;x<data.length;x++) {
if(data[x]>'9'||data[x]<'0') {
return false;
}
}
return true;
}
}
下面利用正则操作:
package classkua;
public class Testa {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="2345";
System.out.println(num.matches("\\d+"));
}
}
验证操作上使用正则符号进行匹配,则代码量可以非常少,“\\d+”就是正则表达式
从JDK1.4开始,java正式支持了正则的开发,同时给出了一个java.util.regex开发包
在java.util.regex包里面只提供有两个核心类:
java.util.regex Pattern:正则标记编译类;
java.util.regex Matcher:正则匹配操作;
很少直接使用以上的两个类,一般都使用String类完成,因为从JDK1.4之后开始String类支持了正则,同时提供以下的正则的开发方法
方法名称 | 类型 | 描述 |
public boolean matcher(String refgex) | 普通 | 正则验证 |
public String replaceAll(String regex,String replacement) | 普通 | 全部替换 |
public String replaceFirst(String regex,String replacement) | 普通 | 替换首个 |
public String[] split(String regex) | 普通 | 全拆分 |
public String[] split(String regex,int limit) | 普通 | 部分拆分 |
下面的讲解以String类之中几个操作方法为主
正则符号(背,重点)
如果要操作正则,必须使用一系列的正则匹配符号,而所有的正则匹配符号都在java.util.regex Pattern类提供;1.表示单个字符(每出现一个只表示一位)
x:表示只能由x组成:
\\:表示转义字符"\";
\t:匹配"tab"键
\n:匹配换行;
2.表示字符的选用范围(每出现一个只表示一位)
[abc]:表示可能a,b,c中的任意一个
[^abc]:表示不是a,b,c中的任意一个
[a-zA-Z]:表示任意的一位字母,可能是大写或小写
[0-9]:表示任意的一位数字:
3.简化表达式(每出现一个只表示一位)
. :表示任意的一位字符:
\d:表示是一位数字,相当于"[0-9]";
\D:表示不是一位数字,相当于"[^0-9]";
\s:表示是任意的一位空格;
\S:表示不是任意的一位空格;
\w:表示是大小写字母,数字,_中的任意一位,相当于"[a-zA-Z0-9_]";
\W表示不是大小写字母,数字,_中的任意一位,相当于"[^a-zA-Z0-9_]";
4.边界匹配
^:写在正则之前,表示正则开始
$:写在正则最后,表示正则结束
5.数量表示:如果没有数量,每一个出现的标记只能表示一位
正则?:表示此正则规范只能够出现0次或1次
正则*:表示此正则出现0次,1次或多次
正则+:表示此正则出现1次或多次
正则{n}:表示此正则出现正好n次
正则{n,}:表示此正则出现正好n次以上
正则{n,m}:表示此正则出现n-m次
6.逻辑操作符:
正则X正则Y:表示正则X判断后执行正则Y
正则X|正则Y:表示两个正则二选一
(正则):包含多个正则,成为一组
通过String类来操作正则
正则的所有操作方法都通过String类完成,所以下面将通过一些代码,通过String来操作正则
范例:字符串替换
package classkua;
public class Zhengzhea {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="dhshd24535&*()fdfd2t44e09";
String regex="[^a-zA-Z]";
System.out.println(num.replaceAll(regex, ""));
}
}
范例:字符串拆分
package classkua;
public class Zhengzheb {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="a1b22c55d6666e9922f2988g";
String regex="\\d+";
String result[]=num.split(regex);
for(int x=0;x<result.length;x++) {
System.out.println(result[x]);
}
}
}
范例:写在用户名由字母,数字,_所组成,要求其范围在6-15位
正则[a-zA-Z0-9_]=\w
package classkua;
public class Zhengzhec {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="hello123";
String regex="\\w{5,15}";
System.out.println(num.matches(regex));
}
}
范例:写在某个学校的学生成绩按照"姓名:年龄:生日:成绩:",那么这样的数据可以出现多条,多条记录之间使用"|"分隔,例如:
"SMFS:20:1990-09-17:90.9|ALLEN:19:1991-11-19:89.6|TONY:21:1989-09-28:100"
首先要进行问题的拆分,因为这样验证之中包含由许多个的小规则
规则一:验证姓名,不设置长度限制(一位或多位,用+表示)
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="SMFS";
String regex="[a-zA-Z]+";
System.out.println(num.matches(regex));
}
}
规则二:验证年龄,年龄是一个数字,长度范围1-3位
package classkua;
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="19";
String regex="\\d{1,3}";
System.out.println(num.matches(regex));
}
}
规则三:生日,生日是数字组合
package classkua;
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="1998-08-92";
String regex="\\d{4}-\\d{2}-\\d{2}";
System.out.println(num.matches(regex));
}
}
规则四:验证小数,成绩最多3位,小数位最多2位
package classkua;
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="98.12";
String regex="\\d{1,3}(\\.\\d{1,2})?";
System.out.println(num.matches(regex));
}
}
组合验证规则
package classkua;
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="SMFS:20:1990-09-17:90.9";
String regex="[a-zA-Z]+:\\d{1,3}:\\d{4}-\\d{2}-\\d{2}:\\d{1,3}(\\.\\d{1,2})?";
System.out.println(num.matches(regex));
}
}
满足于多组信息的操作
public class Zhengzhed {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num="SMFS:20:1990-09-17:90.9|ALLEN:19:1991-11-19:89.6|TONY:21:1989-09-28:100";
String regex="([a-zA-Z]+:\\d{1,3}:\\d{4}-\\d{2}-\\d{2}:\\d{1,3}(\\.\\d{1,2})?\\|?)+";
System.out.println(num.matches(regex));
}
}
范例:验证email地址,email地址的验证规则如下:
用户名只能够以字母,数字,_,组成
用户名只能以字母开头
用户名的长度要求在6-20位之间
域名只能四:com,cn,net,com.cn,net.cn,edu,gov;
package classkua;
public class Zhengzhee {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
String num="mldn.hello123@163.com.cn";
String regex="[a-zA-Z][a-zA-Z0-9_\\.] {5,19}"
+ "@[a-zA-Z-0-9]+\\."
+ "(com|cn|net|gov|edu|com\\.cn|net\\.cn)";
System.out.println(num.matches(regex));
}
}