一.正则表达式

1.预定义字符集

 . 表示任意一个字符
\d 表示任意一个数字
\w 表示任意一个单词字符(只能是数字、字母、下划线)
\s 表示任意一个空白字符(\t\r\n\f\x0B)
\D 表示任意一个非数字字符
\W 表示任意一个非单词字符
\S 表示任意一个非空
\. 表示.

2.字符集合[]

正则表达式 说明
[] 一个字符
[ace] a c e中任意一个字符
[^] 除了某个字符
[^ace] 除了a c e的任意字符
[a-z] a、b、c……z中的任意一个字符
[a-zA-Z0-9] a-z、A-Z、0-9中任意一个字符
[a-z&&[^bc]] a-z中除了bc以外的任意一个字符

3.数量词

正则表达式 说明
A?  表示0个或1个A
A*  表示0或任意多个
 A+  表示连续出现>=1次
A{n}   n个A 
X{n,}   >=n个A 
X{n,m}   表示n到m个A 

4.分组()

() 可以将内容看做一个整体。()中可以使用"|"来表示或关系。

例:(ABC){3}        ABCABCABC

  (ABC|DEF){3}    可以是DEFABCABC、ABCDEFABC、ABCABCDEF、ABCDEFDEF、DEFABCDEF、DEFDEFABC、DEFDEFDEF其一。

5.边界符

通过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个整体。若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。

不加:(ABC){3}   123ABCABCABC123231同样符合。

加^  :^(ABC){3}    ABCABCABC123231符合。123ABCABCABC不符合。

加$  :(ABC){3}$   123ABCABCABC符合。 ABCABCABC123231不符合。

加^$:^(ABC){3}$ 必须是ABCABCABC才符合。

【在java中,^$写与不写效果相同,在其他语言中未必如此。】

二.java中String正则表达式相关的API

1.matches

matches()方法的参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串格式规则来匹配当前字符串,若满足那么该方法返回true。否则返回false。

 import java.util.Scanner;
/**
* 使用给定的正则表达式验证当前字符串是否满足该格式要求.
* boolean matches(String regex)
* 在java字符串中,正则表达式的\,需用\\转义。
* 例如:正则表达式\\,在java字符串中应为\\\\。
*/
public class String_matches {
public static void main(String[] args) {
System.out.println("请输入您的邮箱地址:");
Scanner in = new Scanner(System.in);
String mail = in.nextLine(); //邮箱的正则表达式:[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z]+)+
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+";
System.out.println(regex); boolean match = mail.matches(regex);
if(match){
System.out.println("是邮箱");
}else{
System.out.println("不是邮箱");
}
in.close();
}
}

boolean matches(String regex)

2.split

String[] split(String regex):参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并按照满足的部分将字符串拆分。

 /**
* 将当前字符串按照给定的正则表达式匹配的部分进行拆分.
* String[] split(String regex)
*/
public class String_split {
public static void main(String[] args) {
String str = "0abc123def456ghi789jkl99";
/*
* 按照数字部分进行拆分,得到所有的字母部分
*/
String[] data = str.split("[0-9]+");
System.out.println(data.length);
for(int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
}
//0之前会返回一个空字符串,而99后面的空字符串自动被省略。
//末尾的连续空字符串会被自动省略。

String[] split(String regex)

3.replaceAll

String replaceAll(String regex,String replacement):参数要求传入一个用字符串描述的正则表达式和一个需要替换的字符串,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并将满足的部分替换为需要替换的这个字符串。

 /**
* 将当前字符串中满足正则表达式的部分替换为给定的字符串.
* String replaceAll(String regex,String str)
*/
public class String_replaceAll {
public static void main(String[] args) {
//将数字部分替换为"#NUMBER#"
String str = "abc123def456ghi789jk";
//正则表达式:\d+
str = str.replaceAll("\\d+", "#NUMBER#");
System.out.println(str);
}
}

String replaceAll(String regex,String str)

【java学习笔记】正则表达式的更多相关文章

  1. JAVA学习笔记--正则表达式

    正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...

  2. Java 学习笔记 正则表达式

    2019.3.27 正则表达式 \w 单词字符,匹配[]a-zA-Z_0-9] \w{3} 表示匹配3个字符()ab8,abc,a_c,a5_...) \w+ 至少一个,1到多个 \w* 0个到n个 ...

  3. java学习笔记——正则表达式

    NO 方法名称 类型 描述 1 public boolean matches(String regex) 普通 正则验证使用 2 public String replaceAll(String reg ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  6. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  7. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

  8. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

  9. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  10. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

随机推荐

  1. IO (一)

    1 IO(Input Output)流概述 IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. 流按操作数据分为两种:字节流和字符流. 流 ...

  2. XML系列之--Linq操作带属性的XML(四)

    关于XML,之前解析过电文收发方面的,就是所谓的带表头.前缀(命名空间)SOAP格式.这次需求是解析一个xml的模板(xls内容),然后填充数据,最后保存.需要时可转换xls.pdf等文件.关于这种带 ...

  3. 反向代理和HTTP重定向

    1.什么是正向代理(前向代理)? 在NAT技术(Network Address Translation)出现之前,所有主机无法直接与外网相连,要想上网,需要连接到一台能够访问外网的Web服务器,再通过 ...

  4. typedef如何显示变量类型名

    dsa typedef unsigned long int NUM; typedef unsigned short int Data; //为已经存在的类型起一个别名 //1.定义一个变量 unsig ...

  5. cordova+vue 项目打包成Android(apk)应用

    现在使用vue开发的项目越来越多,使用vue开发的移动端打包就成了最大的问题.现在前端打包方案有好多种,但是综合来说,我比较喜欢用cordova来进行Android和ios的打包,配置完成之后,每次只 ...

  6. iOS-沙盒目录

    ///沙盒路径 + (NSString *)pathDocument{ NSFileManager *fileManager = [[NSFileManager alloc]init]; NSStri ...

  7. ffmpeg转码使用硬件加速

    需求源于手机拍摄的视频,默认参数码率较大,拍摄的文件体积较大,不便于保存和转发.手机默认拍照的720P视频,默认码率达到4M,实际上转成1M就差不多了.FFmpeg默认的转码是使用软件解码,然后软件编 ...

  8. Linux history命令

    history命令主要用于显示历史命令, 重新执行历史命令. Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_ ...

  9. tomcat集群与负载均衡

    参考文章http://kalogen.iteye.com/blog/784908,加上了自己调试过程中遇到的问题. 注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道 ...

  10. BZOJ 3198: [Sdoi2013]spring [容斥原理 哈希表]

    3198: [Sdoi2013]spring 题意:n个物品6个属性,求有多少不同的年份i,j满足有k个属性对应相等 一开始读错题了,注意是对应相等 第i个属性只能和第i个属性对应 容斥一下 \[ 恰 ...