在之前的文章我们介绍了一下 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 从入门到进阶之路(十七)的更多相关文章

  1. Java 从入门到进阶之路(二十七)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...

  2. Java 从入门到进阶之路(一)

    写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...

  3. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  4. Java 从入门到进阶之路(三)

    之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...

  5. Java 从入门到进阶之路(四)

    之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...

  6. Java 从入门到进阶之路(五)

    之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...

  7. Java 从入门到进阶之路(六)

    之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类. Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个 ...

  8. Java 从入门到进阶之路(七)

    在之前的文章中我们介绍了一下 java 中的对象和类,接下来我们来看一下 Java 中的方法重载. 在显示生活中,我们肯定会遇到这样一个问题,那就是我们再商场买东西的时候在付账时的选择.如下 A:在收 ...

  9. Java 从入门到进阶之路(八)

    在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法. 我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0. ...

随机推荐

  1. Gym10198-Mediocre String Problem-2018南京ICPC现场赛

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面. Solu ...

  2. Html代码查看器

    Html代码查看器 效果: 分析: 1.连接网络需要权限 <uses-permission android:name="android.permission.INTERNET" ...

  3. idea中git stash--解决pull冲突或切换分支问题

    场景1:pull代码时提示冲突,本地代码和远程代码有冲突 场景2:当切换分支时,当前分支的代码又不想commit 这两种场景可以使用git stash来解决,将当前未commit的代码暂存起来. 操作 ...

  4. configure error libmcrypt was not found解决方法

    安装到mcrypt的时候出现了问题./configure提示出错,首先提示*** Could not run libmcrypt test program, checking why-*** The ...

  5. js中的经典案例--简易万年历

    js中的经典案例--简易万年历 html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  6. if语句基本结构以及基础案例演示

    1.结构 if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } ... else { 语句体n+1; } 2.执 ...

  7. neo4j使用cypher查询路径避免出现环路

    neo4j在使用可变长路径找两个点之前的所有路径时,会返回包含环路的路径(一个点在路径中出现两次),如下面的语句: MATCH path = (x)-[:KNOWS*]-(y) 可能返回a->b ...

  8. html/js部分问题和小结

    2015/9/8 1.js中不要试图去处理由[变量:变量]组成的map(不过可以通过DWR.addOptions添加),而是处理[bh:变量][xm:变量],然后通过data[i].bh,data[i ...

  9. pychrm和linux进行链接上传代码

    众享周知:现在在windows文件中我们有pycharm工具帮我们去编辑python脚本,这会省去我们大把的时间让我们进行更多的脚本编辑.有这样的一种方法,我们可以使用pycharm编辑的脚本上传到l ...

  10. L2Dwidget

    只需要在[页首html代码]中引入L2Dwidget.js即可.<!-- 右下角live2d效果 --> <script src="https://eqcn.ajz.mie ...