范例:判断一个字符串是否是由数字组成
public class test {
public static void main(String args[]) throws Exception {
String str = "12a3";
System.out.println(str.matches("\\d+")); //\\d+是正则表达式
}
}
所有支持正则的类都定义在java.util.regex包里面,在java.util.regex包里面定义了2个主要的类:
- Pattern类:此类对象如果想取得必须使用compile()方法,此方法的功能是编译正则;
- Matcher类:通过Pattern类取得;
正则标记:
所有正则可以使用的标记都在java.util.regex.Pattern类里定义了;
- 单个字符(数量:1)
- 字符:表示由一位字符组成;
- \\:表示转义字符 "\";
- \t:表示一个制表符;
- \n:匹配换行;
- 字符集(数量:1)
- [abc]:表示可能是字符 a 或者b 、c中的任意一位;
- [^abc]:表示不是字符abc中的任意一位;
- [a-z]:所有的小写字母;
- [a-zA-Z]:任意的一位字母,不区分大小写;
- [0-9]:表示任意的一位数字;
- 简化的字符表达式(数量:1)
- .:点表示任意一位字符;
- \d:等价于 “[0-9]” ,属于简化写法;
- \D:等价于 “[^0-9]”,属于简化写法;
- \s:表示任意的空白字符,例如:"\t", "\n";
- \S:表示任意的非空白字符;
- \w:等价于 "[a-zA-Z_0-9]" ,表示由任意的字母、数字下划线组成;
- \W:等价于 "[^a-zA-Z_0-9]" ,表示不是由任意的字母、数字下划线组成;
- 边界匹配:(不要在Java中使用,可以在js中使用)
- ^:正则的开始;
- $:正则的结束;
- 数量表达
- 正则?:表示该正则可以出现0次或1次;
- 正则+:表示该正则可以出现1次或1次以上;
- 正则*:表示该正则可以出现0次、1次或多次;
- 正则{n}:表示该正则正好出现n次;
- 正则{n,}:表示该正则出现n次以上(包含n次);
- 正则{n,m}:表示该正则出现n~m次(包含n和m次);
- 逻辑运算
- 正则1正则2:正则1判断完成之后继续判断正则2;
- 正则1|正则2:正则1或者正则2有一组满足即可;
- (正则):将多个正则作为一组,可以为这组单独设置出现的次数;
String类对正则的支持:
范例:实现字符串的替换
public class test {
public static void main(String args[]) throws Exception {
String str = "gxsibdxRYUIOJTY78987677%^&*((*&^";
String regex = "[^a-z]";
System.out.println(str.replaceAll(regex, ""));
}
}
范例:字符串拆分(按照数字拆分)
public class test {
public static void main(String args[]) throws Exception {
String str = "gxsibd344546xRYUIOJ547TY78987677%^&*((*&^";
String regex = "\\d+";
String result[] = str.split(regex);
for (int x = 0; x < result.length; x++) {
System.out.println(result[x]);
}
}
}
范例:验证一个字符串是否是数字,如果是将其变为double类型
public class test {
public static void main(String args[]) throws Exception {
String str = "10.1";
String regex = "\\d+(\\.\\d+)";
System.out.println(str.matches(regex));
if (str.matches(regex)) { //转型之前要进行验证
System.out.println(Double.parseDouble(str));
}
}
}
范例:判断字符串是否是一个IPV4地址
public class test {
public static void main(String args[]) throws Exception {
String str = "196.168.1.1";
String regex = "(\\d{1,3}\\.){3}\\d{1,3}";
System.out.println(str.matches(regex));
}
}
范例:判断是否是日期,如果是则改为Date类型
public class test {
public static void main(String args[]) throws Exception {
String str = "2020-06-28";
String regex = "\\d{4}-\\d{2}-\\d{2}";
System.out.println(str.matches(regex));
if (str.matches(regex)) {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
System.out.println(date);
}
}
}
范例:判断电话号码
- 45895623:长度是7-8位;正则:"\\d{7,8}"
- 010-45692368:区号是3-4位;只有出现电话的时候才会出现 " - " ;正则:"\\d{3,4}-\\d{7,8}",综合情况1变为:"(\\d{3,4}-)?\\d{7,8}";
- (010)-78536952:括号要一对出现:"((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}";
public class test {
public static void main(String args[]) throws Exception {
String str = "78952569";
String regex = "((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}";
System.out.println(str.matches(regex));
}
}