正则表达式

1.1、正则表达式的引出

判断一个字符串是否由数字组成。

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = " 13412a 4124214141232" ;
		if (isNumber(str)) {
			System.out.println("是由数字所组成!");
		} else {
			System.out.println("不是由数字所组成!");
		}
	}
	public static boolean isNumber(String data) {
		char arr [] = data.toCharArray() ;	// 字符串变为字符数组
		for (int x = 0; x < arr.length; x++) {
			if (arr[x] < '0' || arr[x] > '9') {
				return false ;
			}
		}
		return true ;
	}
}

问题出现了,如果是个复杂验证呢,所以现在有另外一种做法;

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "1341224124214141232" ;
		if (str.matches("\\d+")) {
			System.out.println("是由数字所组成!");
		} else {
			System.out.println("不是由数字所组成!");
		}
	}
}

1.2、常用正则匹配符号

         

1、 字符:匹配单个字符

        · a:表示匹配字母a

        · \\:匹配转义字符“\”;

        · \t:匹配转义字符“\t”;

        · \n:匹配转义字符“\n”;

2 一组字符:任意匹配里面的一个单个字符;

        · [abc]:表示可能是字母a,可能是字母b或者是字母c

        · [^abc]:表示不是字母a、字母b、字母c的任意一个;

        · [a-zA-Z]:表示全部字母中的任意一个;

        · [0-9]:表示全部数字的任意一个;

3 边界匹配:在以后编写JavaScript的时候使用正则中要使用到;

        · ^:表示一组正则的开始;

        · $:表示一组正则的结束;

4 简写表达式:每一位出现的简写标记也只表示一位;

        · .:表示任意的一位字符;

        · \d:表示任意的一位数字,等价于“[0-9]”;

        · \D:表示任意的一位非数字,等价于“[^0-9]”;

        · \w:表示任意的一位字母、数字、_,等价于“[a-zA-Z0-9_]”;

        · \W:表示任意的一位非字母、数字、_,等价于“[^a-zA-Z0-9_]”;

        · \s:表示任意的一位空格,例如:\n\t等;

        · \S:表示任意的一位非空格;

5 数量表示:之前的所有正则都只是表示一位,如果要想表示多位,则就需要数量表示。

        · 正则表达式?:此正则出现0次或1次;

        · 正则表达式*:此正则出现0次、1次或多次;

        · 正则表达式+:此正则出现1次或多次;

        · 正则表达式{n}:此正则长度正好n次;

        · 正则表达式{n,}:此正则长度n次以上;

        · 正则表达式{n,m}:此正则长度n ~ m次。

6 逻辑表示:与、或、非

        · 正则表达式A正则表达式B:表达式A之后紧跟着表达式B

        · 正则表达式A|正则表达式B:表示表达式A或者是表达式B,二者任选一个出现;

        · (正则表达式):将多个子表达式合成一个表示,作为一组出现。

1.3String类对正则的支持

        在JDK 1.4之后,String类对正则有了直接的方法支持,只需要通过如下的几个方法就可以操作正则。

Pattern类之中存在的方法:

· 字符串全拆分:public String[] split(CharSequence input);

· 字符串部分拆分:public String[] split(CharSequence input, int limit);

Matterh类之中存在的方法:

· 字符串匹配:public boolean matches();

· 字符串全替换:public String replaceAll(String replacement);

· 字符串替换首个:public String replaceFirst(String replacement)。

字符串拆分:

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "a1bb2ccc3dddd4eeeee5fffffff6ggggggg7" ;
		String regex = "\\d" ;// 数字出现1次,[0-9]
		String result [] = str.split(regex) ;
		for (int x = 0; x < result.length; x++) {
			System.out.print(result[x] + "、");
		}
	}
}

运行结果:a、bb、ccc、dddd、eeeee、fffffff、ggggggg、

        做一个简单的验证,要求字符串格式“aaaaab”,在b之前可以有无数多个a,但是不能没有,至少1个。:

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "aaaaaab" ;
		String regex = "a+b" ;
		System.out.println(str.matches(regex));
	}
}

运行结果:true

        验证一个字符串是否是整型数据,如果是则将其变为int型数据,而后执行乘法操作:

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "123" ;
		String regex = "\\d+" ;
		if (str.matches(regex)) {	// 符合于验证要求
			int data = Integer.parseInt(str) ;	// 字符串变为int型数据
			System.out.println(data * data);
		} else {
			System.out.println("字符串不是数字所组成!");
		}
	}
}

运行结果:15129

        验证字符串是否是小数,如果是则将其变为double型数据,而后执行乘法操作:

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "123.1" ;
		String regex = "\\d+(\\.\\d+)?" ;
		if (str.matches(regex)) {	// 符合于验证要求
			double data = Double.parseDouble(str) ;	// 字符串变为double型数据
			System.out.println(data * data);
		} else {
			System.out.println("字符串不是数字所组成!");
		}
	}
}

运行结果:15153.609999999999

        输入一个字符串,按照年-月-日 时-分-秒的形式,如果正确,则将其变为Date型数据:

import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "2022-03-23 10:10:10.100" ;
		String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}" ;
		if (str.matches(regex)) {	// 符合于验证要求
			Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
					.parse(str); 
			System.out.println(date);
		} else {
			System.out.println("字符串不是日期!");
		}
	}
}

运行结果:Wed Mar 23 10:10:10 CST 2022

        一个用户名只能由字母、数字、_所组成,其长度只能是6~15位

public class TestDemo {
	public static void main(String[] args) throws Exception {
		String str = "343234FDSF_";
		String regex = "\\w{6,15}";
		if (str.matches(regex)) { // 符合于验证要求
			System.out.println("用户名合法。");
		} else {
			System.out.println("用户名非法!");
		}
	}
}

运行结果:用户名合法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值