一.正则表达式

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. PHP错误杂记

    Notice: Only variables should be passed by reference in-- 原因:The problem is, that end requires a ref ...

  2. 新awk整理

    总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.a ...

  3. MUI 页面传值,因为用的是H5+ plus方法所以要在真机上才能测试出效果

    页面a.html <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  4. 终于放弃Windows下丑陋的cmd

    微软万年不变的cmd命令行工具,简直其丑无比,交互性极差.但是作为开发者有时离不开.最近用了几款开源替代方案.发现几款不错的cmd替代者.例如Cmder.babun.ConsoleZ.win-bash ...

  5. OPP面向对象的介绍及使用

    概述 面向过程与面向对象面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类, ...

  6. HashMap----工作原理

    先来些简单的问题 "你用过HashMap吗?" "什么是HashMap?你为什么用到它?" 几乎每个人都会回答"是的",然后回答HashMa ...

  7. Spring Task定时任务Scheduled

    Spring的任务调度,采用注解的形式 Spring中@Scheduled的用法. spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns=" ...

  8. 浅讲JUnit

    JUnit单元简介:      JUnit ----是一个开发源码的java测试框架,用于编写和运行可重复的测试,它是用于单元测试框架体系xUnit的一个实例, 用于java语言,主要用于白盒测试,回 ...

  9. DOM备忘录

    nodeName和nodeValue属性 对于element节点而言,nodeName是标签名,nodeValue是null:而对于textNode节点而言,nodeName是#Text,nodeVl ...

  10. shell实现centos7双网卡修改网卡名eth0,eth1,并设置网络

    #!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'` interface2=`ls /sys/class/net| ...