正则表达式语法结构图:

Java正则表达式类库结构图:

Java典型例子

1、String类 matches()方法

判断字符串是否符合特定正则表达式

@Test public void testRegex(){
	String regex = ".*\\d{3}.*";
	String str1 = "11tec34";
	String str2 = "285dffd";
	String str3 = "bac7736db";
	//输出:false, true, true
	System.out.println(str1.matches(regex) + "," + str2.matches(regex) + "," + str3.matches(regex));
}

2、String类 split()方法

用正则表达式分割字符串

@Test public void testRegex2(){
	String input = "hello3world8my9name1is5jacket";
	String regex = "\\d";  //以数字作为分隔符
	String strs[] = input.split(regex);
	//输出:hello world my name is jacket
	for(String str : strs){
		System.out.print(str + " ");
	}
	System.out.println();

	input = "hellodogworlddogmydognamedogisdogjacket";
	regex = "dog";  //以"dog"字符作为分隔符
	strs = input.split(regex);
	//输出:hello world my name is jacket
	for(String str : strs){
		System.out.print(str + " ");
	}
}

3、String类 replace()方法

用正则表达式替换字符

@Test public void testRegex3(){
	String input = "hello3world8my9name1is5jacket";
	String regex = "\\d";  //以数字作为分隔符
	String firstStr = input.replaceFirst(regex, ":"); //只替换第一个匹配的字符
	String allStr = input.replaceAll(regex, ":");  //替换所有匹配的字符
	//输出:
	//hello:world8my9name1is5jacket
	//hello:world:my:name:is:jacket
	System.out.println(firstStr);
	System.out.println(allStr);
}

4、Pattern.matches() 静态方法

判断字符串是否符合正则表达式,等同于String类的matches()方法

@Test public void testRegex4(){
	String regex1 = "\\bdog\\b";
	String regex2 = ".*\\bdog\\b.*";
	String input = "dog dog dog doggie dogg";
	//输出:false,true
	System.out.println(Pattern.matches(regex1, input) + "," + Pattern.matches(regex2, input));
}

5、Pattern类 split()方法

根据正则表达式分割字符串,等同于String类的split()方法

//6.split() 分割字符串  -> 等同于String的split()方法
@Test public void testRegex6(){
	String regex = "\\d";
	String input = "hello3world5hello8java";
	Pattern p = Pattern.compile(regex);
	String strs[] = p.split(input);
	//输出:hello world hello java
	for(String str : strs){
		System.out.print(str + " ");
	}
}

6、Pattern.quote() 静态方法

获取匹配此字符串的正则表达式

@Test public void testRegex6(){
	//例子1
	String input = ".";
	String regex = Pattern.quote(input);
	boolean flag = Pattern.matches(regex, input);
	//输出:\Q353434\E	true
	System.out.println(regex);
	System.out.println(flag);

	//例子2
	input = "test.test";
	String errorOutput = input.replaceAll(".", "/");
	//输出://///////
	System.out.println(errorOutput);

	//例子3
	String correctOutput = input.replaceAll(Pattern.quote("."), "/");
	//输出:test/test
	System.out.println(correctOutput);
}

7、Matcher类 find()方法,start()方法,end()方法

@Test public void testRegex7(){
	//m.start()   m.end()
	String regex = "\\bdog\\b";
	String input = "dog dog dog doggie dogg";
	Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);        // 获得匹配器对象
    int count = 0;
    while (m.find()) {
           count++;
           //Match number 1,start(): 0,end(): 3
           //Match number 2,start(): 4,end(): 7
           //Match number 3,start(): 8,end(): 11
           System.out.print("Match number " + count);
           System.out.print(",start(): " + m.start());
           System.out.println(",end(): " + m.end());
    }
}

8、Matcher类 find(int index)方法,start(int index),end(int index)

@Test public void testRegex8(){
	//m.start()   m.end()
	String regex = "\\bdog\\b";
	String input = "dog dog dog doggie dogg";
	Pattern p = Pattern.compile(regex);
      Matcher m = p.matcher(input);        // 获得匹配器对象

    //m.find(int start)
    //输出:start(): 0,end(): 3
    //start(): 4,end(): 7
    m.find(0);  //从要匹配的字符串的第几个字符开始寻找
    System.out.print("start(): " + m.start());
    System.out.println("end(): " + m.end());
    m.find();
    System.out.print("start(): " + m.start());
    System.out.println("end(): " + m.end()); 

    //m.find(int start)
    //输出:start(): 4,end(): 7
    //start(): 8,end(): 11
    m.find(4);
    System.out.print("start(): " + m.start());
    System.out.println("end(): " + m.end());
    m.find();
    System.out.print("start(): " + m.start());
    System.out.println("end(): " + m.end()); 

    //m.start(int group)	m.end(int group)
    m.find(0);	//
    int firstStartGroupIndex = m.start(0);
    System.out.println(firstStartGroupIndex);
}

9、Matcher类 lookingAt()方法,matches()方法

判断字符串是否匹配特定的正则表达式,lookingAt()方法不要求全部匹配,而matches()方法要求全部匹配

@Test public void testRegex9(){
	String regex = "foo";
	String str = "fooooooooooooooooo";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str); 

        System.out.println("Current regex is: " + regex);
        System.out.println("Current str is: " + str); 

        System.out.println("lookingAt(): " + matcher.lookingAt());  //true
        System.out.println("matches(): " + matcher.matches()); 	//false,因为matches要求全部匹配
}

此外还有其他的Matcher类的方法未整理,

//还有Matcher类的其他方法未整理:

//1.group(int group)方法

//2.appendReplacement() / appendTail() / replaceAll() / replaceFirst() / quoteReplacement()

//99.Matcher类的find()方法,start()方法,end()方法

  

更多详细的正则表达式博文可以参考:

微软官方文档:https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx

一个很好的正则表达式教程:http://www.java3z.com/cwbwebhome/article/article8/Regex/Java.Regex.Tutorial.html#reg7

4.熟悉Java基本类库系列——Java 正则表达式类库的更多相关文章

  1. Java面试题系列 ----- Java基础面试题(91道)

    更多详情点击查看,点这里!这里!!这里!!! 文末获取所有面试PDF文档! Java概述 1. 何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了 ...

  2. 2.熟悉Java基本类库系列——Java IO 类库

    Java中常用的IO操作基本上可以分为四大部分,分别是:File类操作.RandomAccessFile类操作.字节流操作.字符流操作.只要熟练掌握了本文中所列举的所有例子,基本上对于Java的IO流 ...

  3. 1.熟悉Java基本类库系列 - 目录

    写这个系列是想让自己多熟悉熟悉Java的基本类库,忘记的时候可以在这里看看之前写过的例子,这样就可以很快的回忆起来如何使用了. 这样就可以很节省时间了. ======= 下面是传送门啦 ======= ...

  4. java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能

    这是java高并发系列第14篇文章. 本文主要内容: 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 介绍LockSupport主要用法 对比3种方式,了解他们之间的区别 LockSuppor ...

  5. java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例

    这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch Cycli ...

  6. java高并发系列 - 第13天:JUC中的Condition对象

    本文目标: synchronized中实现线程等待和唤醒 Condition简介及常用方法介绍及相关示例 使用Condition实现生产者消费者 使用Condition实现同步阻塞队列 Object对 ...

  7. java高并发系列 - 第2天:并发级别

    由于临界区的存在,多线程之间的并发必须受到控制.根据控制并发的策略,我们可以把并发的级别分为阻塞.无饥饿.无障碍.无锁.无等待几种. 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继 ...

  8. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  9. java高并发系列-第1天:必须知道的几个概念

    java高并发系列-第1天:必须知道的几个概念 同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后, ...

随机推荐

  1. Ant学习总结2

    <?xml version="1.0" encoding="UTF-8"?> <project default= "compile& ...

  2. 2013~2014年度 NOIP~GDOI总结

    滚回去撸一年中考撸完之后就迎来了NOIP2013(话说初赛差点被坑了有木有= =)想想当年10月还是那样的天真的去了广州,结果就被虐成翔的回来了= =只做了三道签到题的渣渣就是弱= =DAY1T2死活 ...

  3. java 计算源码的行数

    import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOExcepti ...

  4. 最常用的UML工具介绍

    最常用的UML工具介绍 1.Rational Rose.大名鼎鼎,史上最有名.最无可替代的UML产品,以至于,大多数将之等同于UML工具,正如将可乐等同于可口可乐.需要指出的是,自从 Rational ...

  5. 了解 : Odata 的 $filter

    api/jobPosts?$filter=company/name eq "string" //基本 api/orders?$filter=orderItem/product/EF ...

  6. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 Entity Framework Core Nuget包管理 如果你创建项目的时候启用了个人身份验证的话,项目中就已经包含了EFCo ...

  7. java算法 蓝桥杯(题+答案) 方格填数

    6.方格填数  (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...

  8. struts2学习笔记 ⑤

    拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...

  9. iOS下的界面布局利器-MyLayout布局框架

      Swift:TangramKit: https://github.com/youngsoft/TangramKit OC:MyLayout: https://github.com/youngsof ...

  10. SQL-ROW_NUMBER() OVER函数的基本用法(源码案例)

    SELECT SUM(t.AdjustedBalance) AS Allqmye FROM ( SELECT * FROM ( SELECT ROW_NUMBER() OVER ( PARTITION ...