Bootstrap

Java8——正则表达式

范例:判断一个字符串是否是由数字组成

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)
  1. 字符:表示由一位字符组成;
  2. \\:表示转义字符 "\";
  3. \t:表示一个制表符;
  4. \n:匹配换行;
  • 字符集(数量:1)
  1. [abc]:表示可能是字符 a 或者b 、c中的任意一位;
  2. [^abc]:表示不是字符abc中的任意一位;
  3. [a-z]:所有的小写字母;
  4. [a-zA-Z]:任意的一位字母,不区分大小写;
  5. [0-9]:表示任意的一位数字;
  • 简化的字符表达式(数量:1)
  1. .:点表示任意一位字符;
  2. \d:等价于 “[0-9]” ,属于简化写法;
  3. \D:等价于 “[^0-9]”,属于简化写法;
  4. \s:表示任意的空白字符,例如:"\t",  "\n";
  5. \S:表示任意的非空白字符;
  6. \w:等价于 "[a-zA-Z_0-9]" ,表示由任意的字母、数字下划线组成;
  7. \W:等价于 "[^a-zA-Z_0-9]" ,表示不是由任意的字母、数字下划线组成;
  • 边界匹配:(不要在Java中使用,可以在js中使用)
  1. ^:正则的开始;
  2. $:正则的结束;
  • 数量表达
  1. 正则?:表示该正则可以出现0次或1次;
  2. 正则+:表示该正则可以出现1次或1次以上;
  3. 正则*:表示该正则可以出现0次、1次或多次;
  4. 正则{n}:表示该正则正好出现n次;
  5. 正则{n,}:表示该正则出现n次以上(包含n次);
  6. 正则{n,m}:表示该正则出现n~m次(包含n和m次);
  • 逻辑运算
  1. 正则1正则2:正则1判断完成之后继续判断正则2;
  2. 正则1|正则2:正则1或者正则2有一组满足即可;
  3. (正则):将多个正则作为一组,可以为这组单独设置出现的次数;

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);
		}
	}
}

范例:判断电话号码

  1. 45895623:长度是7-8位;正则:"\\d{7,8}"
  2. 010-45692368:区号是3-4位;只有出现电话的时候才会出现 " - " ;正则:"\\d{3,4}-\\d{7,8}",综合情况1变为:"(\\d{3,4}-)?\\d{7,8}";
  3. (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));
	}
}

 

;