在之前的文章我们介绍了一下 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. HDU-4475 Downward paths(找规律)

    Downward paths Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. jmeter添加自定义扩展函数之DoubleSum

    1,打开eclipse,新建maven工程,在pom中引用jmeter核心jar包,具体请看---https://www.cnblogs.com/guanyf/p/10863033.html---,这 ...

  3. Python 进阶_OOP 面向对象编程_类属性和方法

    目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ...

  4. 《单词的减法》state1~state17(第三遍学习记录)

    2016.05.24 state 8 curse/curve dedication 多用于奉献和献身 disastrous disruptive distract state 9 domestic/d ...

  5. JS中基本数据类型和引用类型最根本的区别

    栈内存和堆内存:https://segmentfault.com/a/1190000015118062 https://segmentfault.com/a/1190000016389376 变量:内 ...

  6. C#后台将string="23.00"转换成int类型

    在C# 后台将String类型转换成int 有以下几种方法: (1)  int.TryParse(string); (2) Convert.Toint32(string); (3) (int)stri ...

  7. npm安装报错:Error: EACCES: permission denied

    报错如下: sudo npm i webpack -g /Users/xesfe/.npm-global/bin/webpack -> /Users/xesfe/.npm-global/lib/ ...

  8. python基础--快速排序

    1.快速排序 快速排序是一种交换排序. 快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大 ...

  9. 搭建 webpack、react 开发环境(一)

    基本介绍   Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源,它可以将多种静态资源 JavaScript.css.le ...

  10. 如何多个router 进行合并?

    有时间可能有多个人开发,如果在共用router, 势必会造成合并冲突,可以分开多个router.js ,然后进行合并 // router0.jsconst studyRouter = [ { path ...