Java从零开始学三十二(正则表达式)
一、为什么要有正则
二、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
|
.
|
匹配除换行符之外的任意字符
|
|
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次
|
|
No.
|
规范
|
描述
|
No.
|
规范
|
描述
|
|
1
|
XY
|
X规范后跟着Y规范
|
2
|
X | Y
|
X规范或Y规范
|
|
3
|
(X)
|
做为一个捕获组规范
|
|
No.
|
方法
|
类型
|
描述
|
|
1
|
public static Pattern compile(String regex)
|
普通
|
指定正则表达式规则
|
|
2
|
public Matcher matcher(CharSequence input)
|
普通
|
返回Matcher类实例
|
|
3
|
public String[] split(CharSequence input)
|
普通
|
字符串拆分
|
|
No.
|
方法
|
类型
|
描述
|
|
1
|
public boolean matches()
|
普通
|
执行验证
|
|
2
|
public String replaceAll(String replacement)
|
普通
|
字符串替换
|
三、正则验证
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对正则表达式的支持
|
No.
|
方法
|
类型
|
描述
|
|
1
|
public boolean matches(String regex)
|
普通
|
字符串匹配
|
|
2
|
public String replaceAll(String regex,String replacement)
|
普通
|
字符串替换
|
|
3
|
public String[] split(String regex)
|
普通
|
字符串拆分
|
Java从零开始学三十二(正则表达式)的更多相关文章
- Java从零开始学四十二(DOM解析XML)
一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...
- Java从零开始学三十九(对象序列化)
一.序列化 将对象的状态存储到特定存储介质中的过程 对象序列化,就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储. 序列化保存对象的“全景图”,构建对象的“ ...
- Java从零开始学三十八(JAVA IO- 重定向IO)
一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...
- Java从零开始学三十六(JAVA IO- 字符流)
一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的 ...
- Java从零开始学三十五(JAVA IO- 字节流)
一.字节流 FileOutputStream是OutputStream 的直接子类 FileInputStream也是InputStream的直接子类 二.文本文件的读写 2.1.字节输入流 Test ...
- Java从零开始学三十三四(JAVA IO-流简述)
一.流概念(stream) File类并不能对文件内容进行读写. 读文件就是指:把文件的内中的数据读取到内存中来 写文件就是指:把内存中的数据写入到文件中去. 通过什么读写文件呢?文件流. 1.1.流 ...
- Java从零开始学三十(String和StringBuffer类)
一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作 二.Str ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java从零开始学四十(反射简述一)
一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...
随机推荐
- Android Studio2.3.3卡在Building 'xxx' Gradle project info的解决方法
Android Studio版本:V2.3.3 操作系统环境:Ubuntu14.04 64bit 新安装好Android Studio后,在创建新的项目时或者在导入他人的项目代码时,Android ...
- 伟大的通信使者——JSON(JavaScript版本)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表 ...
- Leetcode 树 Populating Next Right Pointers in Each Node II
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Populating Next Right Pointers in Each Node II ...
- mysql slock
http://www.itdks.com/dakashuo/new/dakalive/detail/3888
- java多线程知识点汇总(一)多线程基础
1.什么叫多线程程序? 答:一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序. java编写的程序都是多线程的,因为最少有俩线程,main主线程和gc线程. ...
- 正确理解java编译时,运行时以及构建时这三个概念
Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个pers ...
- 试用log4jdbc
近日发现一个好东东log4jdbc,他是一个JDBC驱动器,能够记录SQL日志和SQL执行时间等信息.log4jdbc使用SLF4J(Simple Logging Facade For Java)作为 ...
- 日期时间篇asctime ctime gettimeofday gmtime localtime mktime settimeofday time
asctime(将时间和日期以字符串格式表示) 相关函数 time,ctime,gmtime,localtime 表头文件 #include<time.h> 定义函数 char * asc ...
- PyCharm中Python代码提示:Shadows name from outer scope
函数内部的变量,如果和函数被调用的外部的变量一样的话,就被PyCharm中叫做shadows name 这样的话,容易引发不容易觉察到的,由于函数内部和外部的变量名一致而引发的一些问题: 比如:内部函 ...
- wifiphisher使用介绍
1.github地址:https://github.com/sophron/wifiphisher 2.需要安装在kali linux下面 3.需要两个无线网卡 4.安装方法是使用介绍,参考githu ...