【java学习笔记】正则表达式
一.正则表达式
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学习笔记】正则表达式的更多相关文章
- JAVA学习笔记--正则表达式
正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...
- Java 学习笔记 正则表达式
2019.3.27 正则表达式 \w 单词字符,匹配[]a-zA-Z_0-9] \w{3} 表示匹配3个字符()ab8,abc,a_c,a5_...) \w+ 至少一个,1到多个 \w* 0个到n个 ...
- java学习笔记——正则表达式
NO 方法名称 类型 描述 1 public boolean matches(String regex) 普通 正则验证使用 2 public String replaceAll(String reg ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记06--正则表达式
java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...
- 20155234 2610-2017-2第九周《Java学习笔记》学习总结
20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
随机推荐
- Centos7下Java开发基本环境搭建
一.Centos7安装JDK 首先查看自己的机器上是否已经自带openjdk,命令如下: rpm -qa | grep jdk 如果存在,则按照如下命令进行依次卸载: yum -y remove fi ...
- appium GUI介绍
Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...
- Java设计模式之策略模式与状态模式
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. ...
- win7 重装 docker 启动后无法启动错误解决
描述 win7 重新安装Docker 后启动 Docker Quickstart Terminal 出现如下错误 Starting "default"... (default) ...
- Python元编程
简单定义"元编程是一种编写计算机程序的技术,这些程序可以将自己看做数据,因此你可以在运行时对它进行内审.生成和/或修改",本博参考<<Python高级编程>> ...
- POJ 3537 Crosses and Crosses [Multi-SG]
传送门 我也不知道为什么枚举vis必须加上一个边界才能A 以后还是都加上吧 #include <iostream> #include <cstdio> #include < ...
- BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
题意: $n$个人排队打饭,第$i$个人口味$a_i$,能容忍最多身后第$b_i$个人先打饭. 先后两人$i,j$做饭时间为$a_i & a_j - a_i | a_j$ 求最少时间 一开始想 ...
- new function
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 浅学vue
因之前项目接触了vue,从此我被迷住,简洁而不失优雅,小巧而不乏大匠. 首先我们要了解vue,什么是vue,正如官网所说:Vue.js 是一套构建用户界面的渐进式框架,Vue 的核心库只关注视图层.V ...
- 在阿里云CentOS 7创建swap分区
https://blog.tanteng.me/2016/03/aliyun-centos-7-swap/ Centos 系统swap虚拟内存添加与删除配置