JavaSE(十四)-正则表达式
  eZw8kcl3fQWu 2023年11月02日 86 0



文章目录

  • 1.正则表达式(Regular Expression--regex)
  • 1.1.正则表达式引入
  • 1.2.什么是正则表达式
  • 1.3.正则表达式规范
  • 1.4.正则表达式用法
  • 2.正则表达式案例
  • 2.1.案例1:验证手机号是否合法
  • 2.2 案例2:验证Email号是否合法
  • 2.3 案例3:验证身份证号是否合法
  • 2.4 正则表达式-文本替换
  • 2.5 正则表达式-文本分割
  • 2.6 正则表达式-文本抽取
  • 3.常用的正则表达式(参考)


1.正则表达式(Regular Expression–regex)

1.1.正则表达式引入

  • 案例:用最简单的方式判断一个字符串是否全部由数字组成?
public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一串字符串:");
		String line = input.next(); // 34534543sdfds4534
		char[] chars = line.toCharArray(); // 转化为char数组
		boolean flag = true;
		for (int i = 0; i < chars.length; i++) {
			if (!(chars[i] >= '0' && chars[i] <= '9')) {
				flag = false; // 表示里面有非数字
				break;
			}
		}
		if (flag == true) {
			System.out.println("这个字符串是纯数字组成!");
		} else {
			System.out.println("这个字符串不是纯数字组成!");
		}
	}

正则表达式版本:

public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一串字符串:");
		String line = input.next(); // 34534543sdfds4534
		String regex="\\d+";   // 正则表达式其实也是字符串,表示字符串的字符串
		boolean b = line.matches(regex);
		if(b==true){
			System.out.println("这个字符串是纯数字组成!");
		}else{
			System.out.println("这个字符串不是纯数字组成!");
		}
	}

1.2.什么是正则表达式

  • 在程序开发中,字符串处理非常频繁,那么就可以使用使用正则表达式这个工具对字符串进行相关的操作。
  • 正则表达式可以对字符串进行格式匹配、提取、分割、替换等操作。
  • 正则表达式本身也是一个字符串,只不过这个字符串有特殊的含义,作用是规范其他的的字符串,表示的是字符串的格式的字符串。
  • 正则表达式是一个字符串模板,可以表示一批字符串,所以创建正则表达式就是创建一个特殊的字符串。
  • 正则表达式最常用的场合就是在网页中进行网页表单的数据验证!!!
  • Web开发中表单验证中大量使用正则表达式验证!

1.3.正则表达式规范

JavaSE(十四)-正则表达式_正则表达式

  • 预定义字符类
  • 示例
public class Demo1 {

	public static void main(String[] args) {

		System.out.println("a".matches("."));
		System.out.println("1".matches("\\d"));
		System.out.println("%".matches("\\D"));
		System.out.println("\f".matches("\\s"));
		System.out.println("^".matches("\\S"));
		System.out.println("a".matches("\\w"));
	}
}

JavaSE(十四)-正则表达式_Java知识点_02

  • Greedy数量词
public class Demo2 {

	public static void main(String[] args) {
		System.out.println("a".matches("."));
		System.out.println("a".matches("a"));
		System.out.println("a".matches("a?"));
		System.out.println("aaa".matches("a*"));
		System.out.println("".matches("a+"));
		System.out.println("aaaaa".matches("a{5}"));
		System.out.println("aaaaaaaa".matches("a{5,8}"));
		System.out.println("aaa".matches("a{5,}"));
		System.out.println("aaaaab".matches("a{5,}"));
	}
}
  • 范围表示
public class Demo3 {

	public static void main(String[] args) {
		
		System.out.println( "a".matches("[a]") );
		System.out.println( "aa".matches("[a]+") );
		System.out.println( "abc".matches("[abc]{3,}") );
		System.out.println( "abc".matches("[abc]+") );
		System.out.println( "dshfshfu1".matches("[^abc]+") );
		System.out.println( "abcdsaA".matches("[a-z]{5,}") );
		System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") );
		System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") );
		System.out.println( "abdxyz".matches("[a-c[x-z]]+"));
		System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}"));
		System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}"));
	}
}

1.4.正则表达式用法

  • 方式一:
/*
 * 验证密码是否合法
 * 1.密码必须是字母数字或者下滑线组成
 * 2.密码长度在6-8位
 * 3.密码第一位必须是字母
 */
public class Demo1 {
	public static void main(String[] args) {
		
		String regex="[a-zA-Z]\\w{5,7}";
		Scanner input=new Scanner(System.in);
		System.out.print("请输入密码:");
		String pwd=input.next();
		
		//编译成一个Pattern对象
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(pwd);
		boolean b = m.matches();
		
		if(b==true){
			System.out.println("密码输入合法!");
		}else{
			System.out.println("密码输入不合法!");
		}
	}
}
  • 方式二:

JavaSE(十四)-正则表达式_Java知识点_03

/*
 * 验证密码是否合法
 * 1.密码必须是字母数字或者下滑线组成
 * 2.密码长度在6-8位
 * 3.密码第一位必须是字母
 */
public class Demo1 {
	public static void main(String[] args) {
		
		String regex="[a-zA-Z]\\w{5,7}";
		Scanner input=new Scanner(System.in);
		System.out.print("请输入密码:");
		String pwd=input.next();

		boolean b = Pattern.matches(regex, pwd);
		
		if(b==true){
			System.out.println("密码输入合法!");
		}else{
			System.out.println("密码输入不合法!");
		}
	}
}
  • 方式三:

JavaSE(十四)-正则表达式_正则表达式_04

/*
 * 验证密码是否合法
 * 1.密码必须是字母数字或者下滑线组成
 * 2.密码长度在6-8位
 * 3.密码第一位必须是字母
 */
public class Demo1 {
	public static void main(String[] args) {
		
		String regex="[a-zA-Z]\\w{5,7}";
		
		Scanner input=new Scanner(System.in);
		System.out.print("请输入密码:");
		String pwd=input.next();
		
		//检测密码是否符合正则表达式的含义
		boolean b = pwd.matches(regex); 
		
		if(b==true){
			System.out.println("密码输入合法!");
		}else{
			System.out.println("密码输入不合法!");
		}
		
	}
}

2.正则表达式案例

2.1.案例1:验证手机号是否合法

/*
 * 判断手机号是否合法
 */
public class Demo2 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入手机号:");
		String phone = input.next();
		// 手机号的正则表达式
		String regex = "(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]|17[0|1|2|3|5|6|7|8|9])\\d{8}"; 
		boolean b = phone.matches(regex);
		if(b==true){
			System.out.println("手机号合法!");
		}else{
			System.out.println("手机号不合法!");
		}
	}
}

2.2 案例2:验证Email号是否合法

/*
 * 验证Email号是否合法
 */
public class Demo3 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入邮箱:");
		String email = input.next();
		String regex="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
		boolean b = email.matches(regex);
		if(b==true){
			System.out.println("邮箱号合法!");
		}else{
			System.out.println("邮箱号不合法!");
		}
	}
}

2.3 案例3:验证身份证号是否合法

/*
 * 验证身份证号是否合法
 */
public class Demo4 {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		System.out.print("请输入身份证号码:");
		String id = input.next();
		String regex="[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)";
		boolean b=id.matches(regex);
		if(b==true){
			System.out.println("身份证号码合法");
		}else{
			System.out.println("身份证号码不合法!");
		}
	}
}

2.4 正则表达式-文本替换

  • 案例1:
/*
 * 文本替换
 */
public class Demo1 {

	public static void main(String[] args) {
		//把这个字符串中的数字全部替换成@
		String s = "sdfklsj0lkjsdkj324kjs3kdjfsd4";
		String regex="\\d";
		s = s.replaceAll(regex, "@"); //数字的位置替换成@
		System.out.println(s);
	}
}
  • 案例2:
public static void main(String[] args) {
		
		//把这个字符串中的中文替换成#
		String s="你好,Hello.呵呵.How are you!!";
		String regex="[\\u4e00-\\u9fa5]"; //表示一个中文字
		s = s.replaceAll(regex, "#");
		System.out.println(s);
	}

2.5 正则表达式-文本分割

/*
 * 文本分割
 */
public static void main(String[] args) {
	String s = "efsds34dsafl45ds34kajf34lja";
	String[] strs = s.split("\\d+");
	for (int i = 0; i < strs.length; i++) {
		System.out.println(strs[i]);
	}
}

2.6 正则表达式-文本抽取

public static void main(String[] args) {
		
	//把字符串中的中文提取出来
	Scanner input=new Scanner(System.in);
	System.out.print("输入一句话:");
	String word=input.next();  // Hello,大爷哈喽。hehe....你好!
	
	String regex="[\\u4e00-\\u9fa5]+";
	
	Pattern p = Pattern.compile(regex);
	Matcher m = p.matcher(word);
	
	while(m.find()){
		String s = m.group();
		System.out.println(s);
	}
}

3.常用的正则表达式(参考)

/**
 * @Description
 */
public class Demo4 {

	// email 正确的书写格式为 username@domain
	static String _email = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+ ([-.]\\w+)*";
	
	// 电话 正确格式 012-87654321、0123-87654321、0123-7654321
	static String _tel = "\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";
	
	// 手机号码 13187654321 13587654321
	static String _phone = "^[1][3,5]+\\d{9}";
	
	// 汉字 中国
	static String _chinse = "^[\u4e00-\u9fa5]+$";
	
	// IP 192.168.1.1
	static String _ip = "\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";
	
	// QQ 456789
	static String _qq = "[1-9][0-9]{4,13}";
	
	// 邮编 210000
	static String _mail = "[1-9]\\d{5}(?!\\d)";
	
	// 身份证号码 15或者18位
	static String _id = "\\d{15}|\\d{18}";

}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   114   0   0 Java
  8s1LUHPryisj   2024年05月17日   49   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
eZw8kcl3fQWu