在之前的文章我们介绍了一下 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. yii2和laravel比较

    yii2和laravel比较 一.总结 一句话总结: 开发速度两者相当:laravel的artisan工具和yii的gii有异曲同工的效果,借助于artisan工具,可以快速创建控制器.模型和路由等. ...

  2. lombda 使用记录

    ,,,}; String str1 = Arrays.stream(arr).boxed().map(i -> i.toString()) //必须将普通数组 boxed才能 在 map 里面 ...

  3. javascript标签放置位置

    首先:放置位置哪里都能放 但是js代码很有可能不起作用:例如:往id为span的标签中定时插入数字 var time=document.getElementById("span") ...

  4. Mr. Panda and Crystal(最短路+完全背包)

    http://codeforces.com/gym/101206/attachments 题意: T组输入,每组给出m,n,k,m为能量总数,n为水晶种类数,k为合成方案数.有的水晶可以用能量制造,有 ...

  5. LeetCode刷题: 【120】三角形最小路径和

    1. 题目: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小 ...

  6. SSOJ 317 Fast Ride

    317. Fast Ride Time limit per test: 0.25  second(s) Memory limit: 65536 kilobytes input: standard ou ...

  7. Swift——(六)Swift中的值类型

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/twlkyao/article/details/34855597     在Swift中,结构体和枚举 ...

  8. Java中的动态代理(jdk和cglib)

    JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类 ...

  9. Hibernate4教程六:性能提升和二级缓存

    抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的元数 ...

  10. JavaScript — event介绍以及兼容处理

    JavaScript - event介绍以及兼容处理 1.事件流 浏览器发展到第四代时(IE4及 Netscape Communicator 4),浏览器开发团队遇到一个问题:页面的哪个部分会拥有某个 ...