一、为什么要有正则

正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆份、替换功能。
例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:
不使用正则完成
使用正则完成

二、Pattern、Matcher类

如果要想在程序中应用正则表达式则必须依靠Pattern类与Matcher类,这两个类都在java.util.regex包中定义。Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范。
 
常用正则规则
No.
规范
描述
No.
规范
描述
1
\\
表示反斜线(\)字符
2
\t
表示制表符
3
\n
表示换行
4
[abc]
字符a、b或c
5
[^abc]
除了a、b、c之外的任意字符
6
[a-zA-Z0-9]
表示由字母、数字组成
7
\d
表示数字
8
\D
表示非数字
9
\w
表示字母、数字、下划线
10
\W
表示非字母、数字、下划线
11
\s
表示所有空白字符(换行、空格等)
12
\S
表示所有非空白字符
13
^
行的开头
14
$
行的结尾
15
.
匹配除换行符之外的任意字符
 
    数量表示(X表示一组规范)
 
No.
规范
描述
No.
规范
描述
1
X
必须出现一次
2
X?
可以出现0次或1次
3
X*
可以出现0次、1次或多次
4
X+
可以出现1次或多次
5
X{n}
必须出现n次
6
X{n,}
必须出现n次以上
7
X{n,m}
必须出现n~m次

逻辑运算符(X、Y表示一组规范)
 
No.
规范
描述
No.
规范
描述
1
XY
X规范后跟着Y规范
2
X | Y
X规范或Y规范
3
(X)
做为一个捕获组规范
 
Pattern类的常用方法
No.
方法
类型
描述
1
public static Pattern compile(String regex)
普通
指定正则表达式规则
2
public Matcher matcher(CharSequence input)
普通
返回Matcher类实例
3
public String[] split(CharSequence input)
普通
字符串拆分
在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法。
 
Matcher类的常用方法
No.
方法
类型
描述
1
public boolean matches()
普通
执行验证
2
public String replaceAll(String replacement)
普通
字符串替换
如果要验证一个字符串是否符合规范,则可以使用Matcher类
 

三、正则验证

3.1、验证字符组成

package com.pb.demo2;

import java.util.regex.Pattern;

public class RegexDemo1 {

    public static void main(String[] args) {
String str="1234567890"; //声明字符串由数字组成
//使用正则验证
if(Pattern.compile("[0-9]+").matcher(str).matches()){
System.out.println("数字组成。");
}else{
System.out.println("不全是由数字组成。");
} } }

3.2、验证一字符串是否是合法日期格式

package com.pb.demo2;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* 验证一字符串是否是合法日期格式
*/
public class RegexDemo2 { public static void main(String[] args) {
String str="1983-07-23";
String pat="\\d{4}-\\d{1,2}-\\d{1,2}"; //定义规则
Pattern p=Pattern.compile(pat); //实例化pattern类对象
Matcher m=p.matcher(str); //验证字符串内容是否合法
//使用正则验证
if(m.matches()){
System.out.println("日期格式合法! !");
}else{
System.out.println("日期格式不合法! !");
} } }

3.3、按照字符串的数字将字符串拆分

package com.pb.demo2;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* 按照字符串的数字将字符串拆分
*/
public class RegexDemo2 { public static void main(String[] args) {
String str="A1B22C333D4444E55555F6G77";
String pat="\\d+"; //定义拆分的规则
Pattern p=Pattern.compile(pat); //实例化Pattern类
String [] ss=p.split(str); //拆分为字符串数组
//遍历
for (String s : ss) {
System.out.print(s+"\t");
} } }

结果:

A    B    C    D    E    F    G    

3.4、替换操作

package com.pb.demo2;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* 按照字符串的数字将字符串替换
*/
public class RegexDemo4 { public static void main(String[] args) {
String str="A1B22C333D4444E55555F6G77";
String pat="\\d+"; //定义替换的规则
Pattern p=Pattern.compile(pat); //实例化Pattern类
Matcher m=p.matcher(str); //实例化Matcher类
String newStrirng=m.replaceAll("_");//替换的字符
System.out.println(newStrirng); } }

结果:

A_B_C_D_E_F_G_

3.5、邮箱验证

package com.pb.demo2;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* 邮箱是否合法
*/
public class RegexDemo5 { public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//String pat="^[A-Za-z0-9_]+@[A-Za-z0-9_]+(.[A-Za-z_]{2,3}){1,2}$";
String regEx="^\\w+@\\w+(.[A-Za-z_]{2,3}){1,2}$";
System.out.println("输入邮箱:");
String email=input.nextLine();
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(email);
if(m.matches()){
System.out.println("邮箱合法!!");
}else{
System.out.println("邮箱不合法!!");
} } }

四、String对正则表达式的支持

在String类中有以下三个方法是支持正则操作
No.
方法
类型
描述
1
public boolean matches(String regex)
普通
字符串匹配
2
public String replaceAll(String regex,String replacement)
普通
字符串替换
3
public String[] split(String regex)
普通
字符串拆分
 

Java从零开始学三十二(正则表达式)的更多相关文章

  1. Java从零开始学四十二(DOM解析XML)

    一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...

  2. Java从零开始学三十九(对象序列化)

    一.序列化 将对象的状态存储到特定存储介质中的过程 对象序列化,就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储.   序列化保存对象的“全景图”,构建对象的“ ...

  3. Java从零开始学三十八(JAVA IO- 重定向IO)

    一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...

  4. Java从零开始学三十六(JAVA IO- 字符流)

    一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的 ...

  5. Java从零开始学三十五(JAVA IO- 字节流)

    一.字节流 FileOutputStream是OutputStream 的直接子类 FileInputStream也是InputStream的直接子类 二.文本文件的读写 2.1.字节输入流 Test ...

  6. Java从零开始学三十三四(JAVA IO-流简述)

    一.流概念(stream) File类并不能对文件内容进行读写. 读文件就是指:把文件的内中的数据读取到内存中来 写文件就是指:把内存中的数据写入到文件中去. 通过什么读写文件呢?文件流. 1.1.流 ...

  7. Java从零开始学三十(String和StringBuffer类)

    一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作   二.Str ...

  8. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. Java从零开始学四十(反射简述一)

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

随机推荐

  1. 2016 UESTC Training for Data Structures 题解

    题解在下已经写过一次了,所以就不再写了,下面只有代码 题解下载(1):http://pan.baidu.com/s/1hsAUjMs 题解下载(2):http://pan.baidu.com/s/1m ...

  2. 磁盘满了MySQL会做什么?

    最近遇到一个故障和磁盘满有关系,并且同事也发现经常有磁盘满导致操作hang住无响应的情况,于是抽时间研究了一下这2种情况. 一.磁盘满了之后MySQL会做什么? 我们看下官方的说法 When a di ...

  3. 使用Chrome快速实现数据的抓取(五)—— puppeteer

    如果要以自动化的方式驱动Chrome进行数据抓取,必须实现Chrome Dev Protocol协议的客户端.这个协议本身并不复杂,我在之前的文章中也简单的介绍过一下. Google本身有一个Node ...

  4. WindowsAPI详解——GetDriveType 获得逻辑驱动器的类型

    http://flyxxtt.blogbus.com/logs/43181576.html 函数原型:UINT GetDriveType(LPCTSTR lpRootPathName) 参数lpRoo ...

  5. HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系

    一.前面的所以然 技术的发展日新月异,说不定回家钓几天鱼,就出来个新东西了.新事物新技术发展的初期,你无法预见其未来之趋势,生命诚可贵,没有必要花过多时间深入研究这些新东西,不过,知道了大概,了解个全 ...

  6. 关于DirectShow SDK 和Windows SDK,及DirectX SDK

    关于DirectShow SDK 和Windows SDK,及DirectX SDK   本文描述了DirectShow SDK ,Windows SDK,DirectX SDK ,VS200?之间的 ...

  7. jsp中excel文件的创建与读取

    1.创建excel文件//这里的jxl不是java的标准jar包,需要在项目中另外加载 import jxl.Workbook; import jxl.write.Label; import jxl. ...

  8. 深度学习阅读列表 Deep Learning Reading List

    Reading List List of reading lists and survey papers: Books Deep Learning, Yoshua Bengio, Ian Goodfe ...

  9. Java 从基础到进阶学习之路---类编写以及文档凝视.

    Java之前在学习过,基础知识还没有忘光,并且这些高级语言实在是太像,所以那些数据类型,或者循环控制流,以及标准设备等等就直接略过不说了. 只是一些重大概念会穿插在文章的介绍中. So,这些文章适合于 ...

  10. flume 日志导入elasticsearch

    Flume配置 . flume生成的数据结构 <span style="font-size:18px;">"_index" : "logs ...