常用正则表达式

本文详细介绍了正则表达式的基础知识,包括字符匹配、字符集、简化字符集、边界匹配、数量表示以及逻辑表达式等。通过实例展示了如何使用正则表达式进行字符串匹配,并探讨了在Java中使用正则表达式的具体方法,如数量单位、逻辑组合以及边界处理。此外,还提供了邮箱、日期和电话号码等常见格式的正则匹配规则。
摘要由CSDN通过智能技术生成

1、 【数量:单个】字符匹配

  • 任意字符:表示由任意字符组成
str ="a";
regex = "a";
  • \\:匹配 \;
  • \n:匹配换行
  • \t : 匹配制表符

2、【数量:单个】字符集(可以从里面任选一个)

str ="a";
regex = "[abc]";
regex = "[0-9]";
  • [abc] : 表示由字母a、b、c中的任意一个
  • [^abc] :表示不是由字母a、b、c中的任意一个
  • [a-zA-z] :表示由一个任意字母所组成,不区分大小写
  • [0-9] :表示由一个数字组成

3、【数量:单个】 简化字符集

  • . : 表示任意的一个字符
  • \d : 等价于[0-9]
str ="1";
regex = "\\d"; //两个\表示一个\
  • \D : 表示不是一个数字 等价于[^0-9];
  • \s : 匹配任意的一位空格,可能是空格、换行、制表符;
  • \S : 匹配任意的非空格数据;
  • \w : 匹配字母、数字、下划线,等价于 [a-zA-Z_0-9]
  • \W : 匹配非字母、数字、下划线,等价于 [^a-zA-Z_0-9]

4、边界匹配

  • ^ : 匹配边界开始;
  • $ : 匹配边界结束;

5、数量表示,默认情况下只有添加上了数量单位,才可以匹配多位字符

  • 表达式? : 该正则可以出现0次或1次
  • 表达式* : 该正则可以出现0次、1次或多次
  • 表达式+ : 该正则可以出现1次或多次
str ="aabb";
regex = "\\w+"; //表示字母、数字、下划线在1位或以上
regex = "\\w*"; //表示字母、数字、下划线在0位或以上
  • 表达式{n} : 表达式的长度正好为n次;
  • 表达式{n,} : 表达式的长度为n次以上;
  • 表达式{n,m} : 表达式的长度在n~m次;
str ="aabb";
regex = "\\w{3}"; //表示字母、数字、下划线字符串的位数在3位
regex = "\\w{3,}"; //表示字母、数字、下划线字符串的位数在**3位以上**

6、 逻辑表达式:可以连接多个正则:

  • 表达式X表达式Y : X表达式之后紧跟上Y表达式;
  • 表达式X|表达式Y : 有一个表达式满足即刻;
  • (表达式):为表达式设置一个整体描述,可以为整体描述,设置数量单位。
str ="ax";
regex = "ax"; //先验证a表达式,再验证x表达式。
regex = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-\\.]+\\.([a-zA-Z]{2,4})$";//匹配邮箱表达式

备注

  • 正则表达式中的斜杠\
    1. 代表特殊字符:\t代表制表符,\n代表换行,\t制表符…等
    2. 表达式存在歧义的时候,\来告诉编译器:斜杠后的这个字符只是一个普通字符。如java 需要匹配\ 则变成了\\,因为字符串中要表示一个斜杠,也需要转移符号.
		String str = "as\\sxx";
		String regex = "^[a-z]+\\\\[a-z]+$";
		
		System.out.println(str.matches(regex));//true

		String str = "as\\sxx";
		String regex = "^[a-z]\\\\[a-z]$";
		
		System.out.println(str.matches(regex));//false

		String str = "as\\sxx";
		String regex = "^[a-z]+\\[a-z]+$";
		
		System.out.println(str.matches(regex));//false

		String str = "as\\";
		String regex = "^[a-z]+\\\\[a-z]*$";
		
		System.out.println(str.matches(regex));//true
		//匹配小数点
		String str = "100";
		String regex = "\\d+(\\.\\d*)?";
		
		System.out.println(str.matches(regex)); //true
		// 判断日期所组成 转为Date类型
		String str = "2020-12-02";
		String regex = "\\d{4}-\\d{2}-\\d{2}";
		if(str.matches(regex)) {
			System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
		}
				
	// 无、有区号或者无括号区号电话号匹配
	String str = "(028)-51283346";
	String regex = "((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}";
	
	// 51283346  \\d{7,8}
	// 02851283346 (\\d{3,4})?\\d{7,8}
	
	//邮箱匹配
		String str = "mssdsd889@mss.com";
		String regex = "[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|net|gov)";
		

java.util.regex开发包(包含:Pattern-正则表达式的编译类、Matcher-匹配类),用于更为复杂的正则处理,是string类不具备的。

//匹配出#{}的内容
		String str = "insert into dept(deptno,dname) values (#{deptno}, #{dname})";

		String regex = "#\\{\\w+\\}";
		Pattern pat = Pattern.compile(regex);//编译正则表达式
		Matcher mat = pat.matcher(str);
		while(mat.find()) {
			System.out.println(mat.group(0));//取出第0个
			System.out.println(mat.group(0).replaceAll("#|\\{|\\}", ""));
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值