1、正则表达式最早是从Perl语言中发展而来,在JDK1.4之前如果需要使用正则表达式的相关定义则需要引入其他的*.jar文件,而JDK1.4之后已经默认支持正则表达式,并且提供有java.util.regex开发包,也使String类有方法直接支持正则处理。使用正则表达式的最大特点在于方便进行验证处理,以及方便进行复杂字符串的修改处理。
2、正则标记
java.util.regex开发包中提供有一个Pattern程序类,这个程序类中定义有所有支持的正则标记。
①单个字符匹配:表示由任意字符组成
String str = "aa";
String regex = "a";
System.out.println(str.matches(regex)); //false
②\\匹配\;\n匹配换行;\t匹配制表符
③字符集
[abc]表示可能是a、b、c中的任意一个字符
[^abc]表示不是a、b、c中的任意一个字符
[a-zA-Z]表示由任意一个字母所组成,不区分大小写
[0-9]表示由一位数字组成
④简化字符集
.表示任意的一个字符
\d等价于"[0-9]"范围
String str = "0";
String regex = "\\d";
System.out.println(str.matches(regex)); //true
\D等价于[^0-9]范围
\s匹配任意一位空格、换行(\n)、制表符(\t)
\S匹配任意的非空格数据
\w匹配字母、数字、下划线,等价于[a-zA-Z_0-9]
\W等价于[^a-zA-Z_0-9]
⑤边界匹配
^匹配边界开始
$匹配边界结束
⑥数量表示
表达式?:该正则可以出现0次或1次
表达式*:该正则可以出现0次、1次或多次
表达式+:该正则可以出现1次或多次
表达式{n}:表达式的长度正好为n次
表达式{n,}:表达式的长度正好为n次以上
表达式{n,m}:表达式的长度在n~m次
⑦逻辑表达式
表达式X表达式Y:表达式X紧跟着表达式Y
表达式X | 表达式Y:有一个表达式满足即可
(表达式):为表达式设置一个整体描述,可以为整体描述设置数量单位
3、String类对正则的支持
普通方法:
将指定字符串进行正则判断:public boolean matches(String regex)
替换全部: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 str = "100.0";
String regex = "\\d+(\\.\\d+)?"; //?表示小数部分出现0次或1次
System.out.println(str.matches(regex));
验证邮箱:String regex = "[a-zA-Z0-9]\\w+@\\.(cn|com|net|gov)";
4、java.util.regex开发包
java.util.regex开发包中一共定义了两个类:Pattern类(正则表达式编译)、Matcher(匹配)
Pattern类中正则表达式编译处理方法:public static Pattern compile(String regex)
字符串拆分方法:public String[] split(CharSequence input)
示例:
Pattern pat = Pattern.compile(regex); //编译正则表达式
String result[] = pat.split(str); //拆分字符串
Matcher类实现正则匹配的处理类,这个类的对象实例化依靠Pattern类完成。
Pattern pat = Pattern.compile(regex); //编译正则表达式
Matcher mat = pat.matcher(str);
System.out.println(mat.matches());
如果纯粹是进行拆分、替换、匹配操作,无需使用java.util.regex开发包,只依靠String类即可。但是Matcher类中的分组功能是String类中不具备的。
String str = "INSER INTO dept(deptno, dname, loc) VALUES(#{deptno},#{dname},#{loc})";
String regex = "#\\{\\w+\\}";
Pattern pat = Pattern.compile(regex); //编译正则表达式
Matcher mat = pat.matcher(str);
while(mat.find()) { //是否有匹配成功的内容
System.out.println(mat.group(0).replaceAll("#|\\{|\\}", ""));
}