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. ...
随机推荐
- mysql联合查询sql优化
我们在使用mysql数据库时,经常会使用到mysql的联合查询,联合查询分为内连接和外连接,内连接查询结果是联合的表都存在匹配才会有结果,外连接则根据驱动表是否存在匹配来生成结果集. 这里使用mysq ...
- 2.2寸(14PIN)TFT液晶屏STM32 SPI 控制
屏幕如图所示,共14个IO口(也可能只有13个),控制屏幕的有9个IO口 详细版介绍见:http://www.ciast.net/post/20151112.html 反面IO口图: 连接通过SPI方 ...
- Git 提交的正确姿势
Git 提交的正确姿势:Commit message 编写指南 SCOP范围 middleware core config plugin test type范围 Git 每次提交代码,都要写 Comm ...
- maven导出工程pom文件中依赖的jar包
在工程的pom文件里加上下面plugin, 然后执行mvn clean package -Dmaven.test.skip=true命令,就可以lib包收集起来了 <plugin> < ...
- HTML页面隐藏值
<input id="menuId" type="hidden" hidden="hidden" />
- HTML- 锚点实例
<!DOCTYPE HTML> <html> <head> <meta charset='utf-8'> <title>锚点实例</t ...
- C++中的临时对象
1,临时对象神秘在于不知不觉就请入程序当中,并且给程序带来了一定的问题: 2,下面的程序输出什么?为什么? #include <stdio.h> class Test { int mi; ...
- Yii 1.1 cookie删不掉
我的cookie是这样设置的: $cookie = new CHttpCookie('username','Jack'); $cookie->expire = time()+60*60*24*3 ...
- 选择 NoSQL 需要考虑的 10 个问题
那么我为什么要写这篇文章呢? 是因为我认为NoSQL解决方案不如RDBMS解决方案吗?当然不! 是因为我专注于SQL的做事方式,而不想陷入一种相对较新的技术的不确定性吗?不,也不是!事实上,我非常兴奋 ...
- 安卓SDK的配置流程以及安装build-tools等插件
这两天做了一个移动端混合开发的项目,需要配置安卓的SDK,不过在这之前,需要先配置好Java环境(这个在这里就不写了).下面开始配置步骤: 1.下载SDK,然后解压到某个目录下面.推荐两个下载网址: ...