一、正则表达式什么?
1.正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑(匹配)
2.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
(1). 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
(2). 可以通过正则表达式,从字符串中获取我们想要的特定部分。
二、正则标记
常用的正则标记
-
单个字符:
- x:表示由一个字符所组成
- \:表示转义字符“\”
- \t:表示“\t”
- \n:表示“\n”
-
字符集:
- [abc]—表示可能是a,b,c中的一位
- [^abc]—表示不是a,b,c中的任何一位
- [a-z]—表示所有小写字母
- [a-zA-Z]—不区分大小写的任意字母
- [0-9]—表示0-9任何一个数字
- 简化操作:
- .:表示任意的一个字符
- \d:等价于“[0-9]”,正则标记写成\ \d
- \D:等价于“[^0-9]”
- \s:表示任意的空白字符:“\t” “\n”
- \S:表示任意的非空白字符
- \w:等价于“[a-zA-Z_0-9]”,表示由任意的字母数字下划线所组成
- \W:等价于“[^a-zA-Z_0-9]”,表示不是由任意的字母数字下划线所组成
-
数量表达式:
- 正则?:表示此正则可以出现0或1次
- 正则+:表示此正则可以出现1或多次
- 正则*:表示此正则可以出现0,1或多次
- 正则{n}:表示此正则正好出现n次
- 正则{n,}:表示此正则出现n及n次以上
- 正则{n,m}:表示此正则出现n-m次—>可以设计数据库的输入密码位数的判断
-
逻辑运算:
- 正则1正则2:正则1判断完后判断正则2
- 正则1|正则2:正则1或正则2有一组满足即可
- (正则):将多个正则作为一组,可以为这一组单独设置出现的次数
三,正则与String
- public String replaceFirst(String regex, String replacement):正则首部替换
- public String[] split(String regex):正则分割
- public String replaceAll(String regex, String replacement):正则全部替换
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//要求保留所有的小写字母
String str = "g90FDiR@#$%&*^love998+-/.you";
String redex = "[^a-z]";//正则标记:不是小写字母
System.out.println(str.replaceAll(redex," "));//用空格进行替换所有不是小写字母的字符或数字
System.out.println(str.replaceFirst(redex," "));//用空格进行替换首部不是小写字母的字符或数字
//按照数字进行拆分
String redex2 = "\\d+";//正则标记:出现1次或多次
String split[] = str.split(redex2);
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
}
}
- public boolean matches(String regex):正则匹配
public class RegexDemo {
public static void main(String[] args) {
String str = "76335";
System.out.println(str.matches("\\d*"));
}
}
四,正则表达式举例
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//验证一个字符串是否是数字
String str1 = "10.678";
String redex3 = "\\d+(\\.\\d+)?";//验证是否符合正则表达式
if(str1.matches(redex3)){
System.out.println("符合正则表达式转型:"+Double.parseDouble(str1));
}else {
System.out.println("不符合正则表达式");
}
}
}
2.
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//验证IP地址
String str = "255.255.0.0";
String redex = "(\\d{1,3}\\.){2}\\d\\.\\d";
System.out.println(str.matches(redex));
}
}
3.
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//验证日期格式
String str = "2020-09-19";
//String redex = "\\d{4}.\\d{2}.\\d{2}";
String redex = "\\d{4}-\\d{2}-\\d{2}";
System.out.println(str.matches(redex));
}
}
4.
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//验证电话号码
//12345678,101-12345678,(101)-12345678
String str = "(010)-12345678";
String redex = "((\\d{3,4}-)|((\\(\\d{3,4})\\)-))?\\d{7,8}";
System.out.println(str.matches(redex));
}
}
5.
package 正则表达式;
public class StringRegexDemo {
public static void main(String[] args) {
//重点:验证email地址:以字母数字开头,在@之前字符长度在0-15之间,最后以.cn/.com/.cn.cn/.com.cn/.cn.edu/.com.edu结尾
String str = "hui_coker@csdn.com.cn";
String redex = "[a-zA-Z0-9]\\w{0,15}@\\w+\\.(cn|com)(\\.(cn|edu))?";
System.out.println(str.matches(redex));
}
}