神奇的正则表达式(校验邮箱,手机号,密码)

正则表达式:表示字符串的判断条件
phone:1[356789][0-9]{9}

// 判断字符串
// 由3个字母组成
// 第一个字母是a/b/c
// 第二个字母是d/e/f/g
// 第三个字母是x/y/z
// System.out.println(str.matches("[abc][defg][xyz]"));

// 匹配由一个字母组成的字符串
// System.out.println(str.matches("[a-zA-Z]"));
// 匹配由一个数字组成的字符串
// System.out.println(str.matches("[0-9]"));
// System.out.println(str.matches("\d"));

// 匹配由一个字符组成的字符串,但不是a/b/c
// [^…] 表示除了这些字符
System.out.println(str.matches("[^abc]"));


// 匹配由a开头的由2个字符组成的字符串
// . 表示通配符,可以匹配任意一个类型的字符
// System.out.println(str.matches(“a.”));
// 判断是否是一个 .
// \\. Java先转义为\. ,正则再转义为.
// System.out.println(str.matches("\\."));
// 怎么匹配 \ “c:\\java”
// \\\\ Java先转义为\\ ,正则再转义为\
System.out.println(str.matches("\\\\"));


// 数量词

// + 表示之前的字符至少出现1次 >= 1
// System.out.println(str.matches(“a.+”));
// 匹配由小写字母开头由数字结尾的字符串
// * 表示之前的字符可有可无 >= 0
// System.out.println(str.matches("[a-z].*\d"));
// 匹配由a开头至多2个字符组成的字符串
// ? 表示之前的字符至多出现1次 <= 1
System.out.println(str.matches(“a.?”)); a ab


// 匹配由5个小写字母组成的字符串
// {n} 表示之前的字符恰好出现n次 == n
// System.out.println(str.matches("[a-z]{5}"));acccc
// 匹配至少由5个小写字母组成的字符串
// System.out.println(str.matches("[a-z]{5,}"));
// 匹配由8-12个小写字母组成的字符串
System.out.println(str.matches("[a-z]{8,12}"));

正则练习

  1. 验证电话号码
//正则表达式,验证电话号码
	public static void test1(){
		Scanner sc = new Scanner(System.in);
		System.out.println("input phone:");
		String phone = sc.next();
		if(phone.matches("1[3456789][0-9]{9}")){
			System.out.println("正确:"+phone);
		}else{
			System.out.println("错误");
		}		
	}
  1. 邮箱的验证
//练习:邮箱的验证
	//wangying@tedu.cn
	//1234567@qq.com
	//abc123@163.com
	//aa222@123.com.cn
	//[a-zA-Z0-9_]+@[a-z0-9]{2,}(\\.[a-z]{2,3}){1,2}
	public static void test2(){
		Scanner sc = new Scanner(System.in);
		System.out.println("input email:");
		String email = sc.next();
		String regex = "[a-zA-Z0-9_]+@[a-z0-9]{2,}(\\.[a-z]{2,3}){1,2}";
		if(email.matches(regex)){
			System.out.println("email:"+email);
		}else{
			System.out.println("邮箱格式错误!");
		}
	}
  1. 输入一个字符串,然后判断字符串是否是一个小数字符串
    10.28 0.56 3.00 13.85 15. 00.65
        Scanner sc=new Scanner(System.in);
		System.out.println("输入数据");
		String str=sc.next();
		String regex1="0\\.[0-9]+";
		String regex2="[1-9][0-9]*\\.[0-9]+";
		if(str.matches(regex1)||str.matches(regex2)) {
			System.out.println("是小数");
		}else {
			System.out.println("不是小数");
		}

验证的特例:100.2, 00.1 , 12.

  1. 校验密码:8-20位,小写字母/大写字母/数字中的至少两种
if(str.matches("[A-Za-z0-9]{8,20}")) {
		if(!str.matches("[A-Z]{8,20}")&&!str.matches("[a-z]{8,20}")&&!str.matches("[0-9]{8,20}")) {
			System.out.println("是");
		}else {
		    System.out.println("不是");
		}
}else {
	  System.out.println("不是");
}

正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。String类里也提供了如下几个特殊的方法
boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。
String replaceAl(String regex, String replacement);将该字符串中所有匹配regex的子串替换成replacement。
String[] split(String regex):以regex作为分隔符,把该字符串分割成多个子串。
上面这些特殊的方法都依赖于Java提供的正则表达式支持。

replaceAll()替换例子:

//replaceAll()替换
	//"a   b    c"   \\s  ""
	public static void test5(){
		String str = "a   b    c";
		String str2 = "abcqsbabc";
		System.out.println(str.replaceAll("\\s", ""));   //abc
		System.out.println(str2.replaceAll("qsb", "*"));    //abc*abc
	}

split()解析字符串例子:

    //split()解析字符串
	//"0001 张三 18 100 99 100"
	public static void test6(){
		String stu = "0001 张三 18";
		String[] values = stu.split("\\s");
		String name = values[1];
		int age = Integer.parseInt(values[2]);
		System.out.println(name+","+age);    //张三,18
		/*for(String str :values){
			System.out.println(str);
		}*/
	}

练习:url地址解析出key-value

        String url="//http://127.0.0.1:8080/myweb/index.html?name=admin&pw=123456";
		if(url.contains("?")) {
			//String substring(int beginlndex): 获取从 beginlndex 位置开始到结束的子字符串。
			// int indexOf(int ch): 找出 ch 字符在该字符串中第一次出现的位置
			String s=url.substring(url.indexOf("?")+1);
			//System.out.println(s);
			String[] values=s.split("&");
			for(String v:values) {
				String[] mapArray=v.split("=");
				System.out.println(mapArray[0]+":"+mapArray[1]);
			}
		}else {
			System.out.println("没有要解析的数据");
		}

结果为:

name:admin
pw:123456
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值