Java Pattern类详解

Pattern在java.util.regex包中,是正则表达式的编译表示形式,此类的实例是不可变的,可供多个并发线程安全使用。

定义

public final class Pattern extends Object implements Serializable

构造器

private Pattern(String p, int f) {pattern = p;flags = f;

// Reset group index count
    capturingGroupCount = 1;
    localCount = 0;

if (pattern.length() > 0) {
        compile();
    } else {
        root = new Start(lastAccept);
        matchRoot = lastAccept;
    }
}

构造器是私有的,不能通过new创建Pattern对象。

获取Pattern类的实例

public static Pattern compile(String regex) {return new Pattern(regex, 0);
}
public static Pattern compile(String regex, int flags) {return new Pattern(regex, flags);
}

Pattern调用静态方法compile返回Pattern实例。

组和捕获

捕获组可以通过从左到右计算其开括号来编号。

在表达式 ((A)(B(C))) 中,存在四个组:

1 ABC
2 A
3 BC
4 C

组零始终代表整个表达式。

方法

1. static Pattern compile(String regex)

将给定的正则表达式编译并赋予给Pattern类

2. static Pattern compile(String regex, int flags)

同上,但增加flag参数的指定,可选的flag参数包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON EQ

3. int flags()

返回当前Pattern的匹配flag参数.

Pattern p = Pattern.compile("a+", Pattern.CASE_INSENSITIVE);
System.out.println(p.flags());// 2

4. String pattern()

返回该Patter对象所编译的正则表达式。

Pattern p = Pattern.compile("\\d+");
System.out.println(p.toString());// 输出\d+
System.out.println(p.pattern());// 输出\d+

5.Pattern.split(CharSequence input)

此方法用于分隔字符串,并返回一个String[]。

Pattern p=Pattern.compile("\\d+");
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com");

运行结果

str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@aaa.com"

6. String[] split(CharSequence input, int limit)

input:要拆分的字符序列;limit:结果阈值,控制应用模式的次数,从而影响结果数组的长度。

6.Pattern.matcher(String regex,CharSequence input)

此方法是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.

Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到

7.Pattern.matcher(CharSequence input)

返回一个Matcher对象,Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作。

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 

例子

import java.util.regex. * ;
public class Replacement {public static void main(String[] args) throws Exception {// 生成一个Pattern,同时编译一个正则表达式 Pattern p = Pattern.compile("[/]+");//用Pattern的split()方法把字符串按"/"分割 String[] result = p.split("Kevin has seen《LEON》seveal times,because it is a good film." + "/ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部" + "好电影。/名词:凯文。");for (int i = 0; i < result.length; i++)       System.out.println(result[i]);}
}

输出结果为: 
Kevin has seen《LEON》seveal times,because it is a good film. 
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。 
名词:凯文。

总结

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

Java Pattern类详解相关推荐

  1. java之Pattern类详解

    在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Pattern  声明: ...

  2. Java Scaner类详解_动力节点Java学院整理

    Java.util.Scanner是Java5.0的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都 ...

  3. java Random类详解

    2019独角兽企业重金招聘Python工程师标准>>> Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起 ...

  4. java file类详解_Java File类详解及IO介绍及使用

    我是一个CPU:这个世界慢!死!了!,可以感受到CPU,内存和硬盘之间的速度比较. 文件的本质 OS(操作系统)的目的就是可以让上层程序可以通过一种统一的方式去拿到无论什么磁盘里的文件(即一段字节流) ...

  5. Java File类详解

    在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成.File 类定义了一些方法来操作文件,如新 ...

  6. Java System类详解

    System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部.由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是 ...

  7. Java Object类详解

    Object 是 Java 类库中的一个特殊类,也是所有类的父类.也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量.当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 O ...

  8. Java—File类详解及实践

    关注微信公众号:CodingTechWork,一起学习进步. File类介绍 File类概述   File类是java.io包下代表与平台无关的文件和目录.File可以新建.删除.重命名文件和目录,但 ...

  9. Java Entry类详解

    Entry类概述 Java的entry是一个静态内部类,实现Map.Entry< K ,V> 这个接口,通过entry类可以构成一个单向链表. 一.java中Map及Map.Entry ( ...

最新文章

  1. C#中JSON和对象之间互相转换功能示例
  2. Linux对包管理阐述
  3. parrot linux 安装grub,parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案...
  4. c语言正确理解以下名词及其含义,C程序作业答案.doc
  5. MySQL报错 Packet for query is too large,server向mysql发送的数据包大小超过mysql限制
  6. python学习turtle(龟图标状态)
  7. Matplotlib 中文用户指南 3.5 密致布局指南
  8. (一)使用MLOps自动训练、测试和部署AI:概述
  9. 使用L2TPV3桥接---FR-TO-PPP
  10. 走进C标准库(6)——string.h中函数的实现memchr
  11. ADB工具华为鸿蒙,adb工具包华为版
  12. 智能硬件产品开发分享
  13. 快速生成数据库ER图的方式
  14. 就算所有人都放弃我,我也不会放弃我自己,坚持梦想,拒绝国企,拒绝公务员
  15. Linux应用软件的安装包常见三种格式
  16. 剥opgw光缆工具_ADSS光缆开剥光缆常用方法及开剥注意点
  17. 轮播一页显示多少条数据
  18. HDU 5804/BC 86A Price List
  19. 利用tldr工具再也不怕记不住Linux命令
  20. Linux FFmpeg依赖库编译

热门文章

  1. 微信订烟服务器异常,大圣教程-,新商盟怎么在微信上订烟新商盟微信订烟教程,9Zu3sEGc50vN...
  2. 【程序设计训练】4-18 身份证校验
  3. matlab中的tempsigma,Matlab数据的统计分析与描述
  4. 互动照片墙效果之扩散效果(一)
  5. React Fiber
  6. form表单文件上传
  7. select下拉框默认样式修改
  8. <Python>PyQt5+OpenCv+Dlib人脸合成程序
  9. 2021年秋招遇到的前端笔试/面试题
  10. php经纬度之间的距离计算公式,php计算两个经纬度地点之间距离的方法分享