Java 从入门到进阶之路(十七)
在之前的文章我们介绍了一下 Java 中类的内部类,本章我们来看一下 Java 中的正则表达式。
在任何一种语言中,都绕不开正则表达式,而且大部分语言的正则表达式都有预定义的字符集,且预定义的字符集也都差不多,如下:
上面的预定义字符集,在JavaScript,Java,Python 中其实是通用的,那接下来我们就利用 Java 的语法来对其进行一下解释。
public class HelloWorld {
public static void main(String[] args) {
String regex = ".";
String string1 = "A";
String string2 = "AB";
System.out.println(string1.matches(regex)); // true
System.out.println(string2.matches(regex)); // false
}
}
在上面的代码中,我们定义了一个 . 的正则表达,. 表示任意一个字符,不能多也不能少,如上,我们通过 matches 方法匹配一个 . 时,"A" 我 true,"B" 为 false;那我们就可以一次类推 \d \w \s 同样也是匹配一个字符,并且必须符合其中的规矩。
那我国我们想输出大于一位的该如何做呢,如下:
public class HelloWorld {
public static void main(String[] args) {
// + 表示至少出现一次,可以出现多次
String regex1 = "[A-Z]+";
String string1 = "A";
String string2 = "AB";
System.out.println(string1.matches(regex1)); // true
System.out.println(string2.matches(regex1)); // true /**
* {2,3}
* 逗号前面表示最少出现 2 次
* 逗号后面表示最多出现 3 次
*
* {2,} 表示最少出现 2 次,最多不限
* {0,2} 如果想表示最多出现次数,最少此时不限,则必须逗号前面为 0,不能为空
*
* */
//
String regex2 = "[A-Z]{2,3}";
String string3 = "A";
String string4 = "AB";
String string5 = "ABCD";
System.out.println(string3.matches(regex2)); // false
System.out.println(string4.matches(regex2)); // true
System.out.println(string5.matches(regex2)); // false // ? 表示至多出现一次
String regex3 = "[A-Z]?";
String string6 = "A";
String string7 = "AB";
System.out.println(string6.matches(regex3)); // true
System.out.println(string7.matches(regex3)); // false
}
}
在上面的代码中,我们实现了单一字符的次数问题,但是如果想要匹配的并非单一字符,比如 "ABC" 该如何实现呢,如下:
public class HelloWorld {
public static void main(String[] args) {
// () 内的将会被视为一个整体
String regex1 = "(ABC)+";
String string1 = "AB";
String string2 = "ABC";
System.out.println(string1.matches(regex1)); // false
System.out.println(string2.matches(regex1)); // true // | 表示 或 的意思
String regex2 = "(ABC|DEF)+";
String string3 = "ABC";
String string4 = "ABCDEF";
System.out.println(string3.matches(regex2)); // true
System.out.println(string4.matches(regex2)); // true }
}
在上面的代码中,我们发现,我们可以通过 () 将想要匹配的整体内容括起来,这样就解决了匹配非单一字符的问题,并且 | 表示或的意思,可以让我们更有选择性的匹配。
当然正则的匹配远不止上面所讲的这些,这只是写基础用法,当然我们根据这些基础用法其实就可以完成一些我们想要的正则匹配。
接下来我们根据上面所说的做一个简单的邮箱的正则匹配:
123abc@163.com,123456789@qq.com,abc_123@gmail.com.cn
上面的三个邮箱可能是我们常用的邮箱,他们在结构上都满足一些共同的特征:数字或字母下划线 @ 数字或字母下划线 . 数字或字母下划线 . 数字或字母下划线
那我们就可以根据上面的特征来做一个正则的验证:
public class HelloWorld {
public static void main(String[] args) {
/**
* \w 或 [a-zA-Z0-9_] 都表示任意字母数字或下划线
* (\.\w) 表示任意一个 .字符串
* 注意:. 在正则中表示任意一个字符,所以前面需要加 \ 来将其转义
*
* */
// \ 在 Java 中只是个普通的字符,所以在前面加一个 \ 将其转义,简单理解就是正则中如果出现 \ 就在前面再加一个 \
String regex = "[a-zA-Z0-9_]+@\\w+(\\.[a-zA-Z0-9_]+)+";
System.out.println(regex); // [a-zA-Z0-9_]+@\w+(\.[a-zA-Z0-9_]+)+
String mail = "abc123@163.com";
boolean flag = mail.matches(regex); // true
if (flag) {
System.out.println("是邮箱");
} else {
System.out.println("不是邮箱");
}
}
}
我们同样可以根据上面的内容来做一个手机号码的正则验证:
public class HelloWorld {
public static void main(String[] args) {
/**
* 1[0,9]{10} 手机号码以 1 开头,后面为 10 为数字
* (\+86|0086)?\s* 手机号前面可能会加 86 或 0086 以及 空格 这些
* + 在正则表达式中有特殊含义,所以加 \ 转义
* */
String regex = "(\\+86|0086)?\\s*1[1-9]{10}";
System.out.println(regex); // (\+86|0086)?\s*1[1-9]{10}
String phone = "+86 13666666666";
boolean flag = phone.matches(regex); // true
if (flag) {
System.out.println("是电话号码");
} else {
System.out.println("不是电话号码");
}
}
}
Java 从入门到进阶之路(十七)的更多相关文章
- Java 从入门到进阶之路(二十七)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...
- Java 从入门到进阶之路(一)
写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...
- Java 从入门到进阶之路(二)
之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...
- Java 从入门到进阶之路(三)
之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...
- Java 从入门到进阶之路(四)
之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...
- Java 从入门到进阶之路(五)
之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...
- Java 从入门到进阶之路(六)
之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类. Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个 ...
- Java 从入门到进阶之路(七)
在之前的文章中我们介绍了一下 java 中的对象和类,接下来我们来看一下 Java 中的方法重载. 在显示生活中,我们肯定会遇到这样一个问题,那就是我们再商场买东西的时候在付账时的选择.如下 A:在收 ...
- Java 从入门到进阶之路(八)
在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法. 我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0. ...
随机推荐
- 广播接收者实现IP拨号
广播接收者实现IP拨号 效果图: 实现的功能就是自动监听我们要拨打的号码,在我们拨打的号码前加上179521 分析: 1.敲个类来继承广播接收者 并且将从打电话应用位置获取的号码加上179521,并将 ...
- offsetleft 和 style.left 的区别
offsetLeft 获取的是相对于父对象的左边距: left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距: 如果父div的position定义为rel ...
- Day 56 jquery
一 .事件委托实例 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...
- The Stream of Corning 2( 权值线段树/(树状数组+二分) )
题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...
- 【Python—字典的用法】找到多个字典的公共键
有 a,b,c,d,e,f 6名球员,他们在三轮比赛中的进球数用 s1,s2,s3 3个字典表示,找到每轮都有进球的球员? 创建 s1,s2,s3 3个字典素材 from random import ...
- [FW]使用kprobes查看内核内部信息
使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低.以内核模块的方式使用kprobes.jprobes,就可以在任意地址插入侦测器,执行包 ...
- CTU Open 2018 Lighting /// 组合数递推 二进制
题目大意: 给定n k 给定一个数的二进制位a[] 求这个数加上 另一个二进制位<=n的数b 后 能得到多少个不同的 二进制位有k个1 的数 样例 input10 51000100111 out ...
- c# 编程--结构体
结构体:由多种简单类型,组合成一种复杂的类型.使用这种复杂的类型来解决生活中的实际例子. 一.结构体定义:struct 结构体的名子{ public 类型名 变量名; .....} ...
- iOS 点击按钮截屏
@interface CaptureViewController () @property (nonatomic, strong) UIImageView *backgrounView; //控制器背 ...
- PostgreSQL的学习-序列
序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表.一个序列对象通常用于为行或者表生成唯一的标识符.下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安 ...