java.util.regex包--正则表达式的使用

原创 2016年05月30日 15:36:43
java提供了使用正则表达式的API----java.util.regex包。

该包下有常用的有2个类(Pattern、Matcher),其内部结构如图:


1. Pattern 类对正则表达式进行编译,Pattern对象就是正则表达式编译后的表达形式。、
2. Splitter 类(分离器),该类对目标字符串和正则表达式进行匹配,并按照正则表达式拆分目标字符串,该类拆分方法被Pattern对象调用。
3. PatternSyntaxException 类继承自非法参数异常,针对正则表达式的语法错误进行提示,getMessage()方法就是用来连接错误信息字符串的。
4. MatchResult 是一个接口,定义了七个方法,分别是: int end();   int end(int group);  int start();  int start(int group);  int groupCount();  String group();  String group(int group);
5. Matcher(匹配器) 类是将正则表达式和目标字符串进行匹配操作的引擎。


正则表达式的简单使用流程:
        1. 创建Pattern对象, Pattern p = Pattern.compile("regex");     传入正则表达式
        2. 创建Matcher对象, Matcher m = p.matcher(CharSquence input);    传入目标字符串
        3. 调用各种方法来对目标字符串进行匹配操作。例如:  boolean b = m.matches();  如果目标字符串和正则表达式互相匹配,返回true


各类方法详解:
    1. Pattern类 (final修饰)
        字段: CASE_INSENSITIVE--忽略大小写   COMMENTS--忽略空白符    DOTALL--单行模式,此模式下 ”.“ 可以代表一切字符    MULTILINE--多行模式
        构造方法:
                构造方法是私有的,创建Pattern对象需要使用Pattern类提供的静态方法Pattern.compile(String regex); 传入正则表达式
                此方还有一个重载方法compile(String regex, int flags);  第二个参数就是传入模式字段表示启动哪种模式。
        常用方法:
                int flags();   返回当前模式字段
                String pattern();    返回当前正则表达式
                Matcher matcher(CharSequence input);    生成一个Matcher对象,传入需要匹配的目标字符串
                boolean matcher(String regex, CharSequence input);    静态方法,直接使用正则表达式去匹配目标字符串,匹配成功为true
                String[] split(CharSequence input);    将目标字符串按照正则匹配的部分拆分(结果数组中不包含匹配的内容,即删除匹配的内容,将剩下的字符组成一个数组)
                String[] split(CharSequence input, int limit);    第二个参数表示把目标字符串拆分成几段,如果指定limit小于使用一个参数的拆分方法拆分得到的数组长度,则此方法拆分的到的数组长度就是limit,即当拆分的段数等于limit时,后面的就不进行拆分了。如果limit的值是0,此方法作用和一个参数的拆分方法一样。

    2. Splitter类(分离器)
        Pattern中的split方法实际上最后还是调用了此类的spilt方法。
        split(Pattern pattern, String regex, String input, int limit);     这几个参数的意义参考Pattern类的split方法。
    
    3. PatternSyntaxException
        这个异常继承自非法参数异常(IlleagalArgumentException),由Pattern类的compile方法抛出。用来检测正则表达式的语法错误。
        调用getMessage()方法返回一个拼装好的错误信息字符串。
    
    4. MatchResult
        一个接口,定义了七个方法,分别是: int end();   int end(int group);  int start();  int start(int group);  int groupCount();  String group();  String group(int group);

    5. Matcher类
        此类的构造方法也是私有的,创建该类对象需要使用Pattern对象的matcher()方法,传入需要匹配的目标字符串。
        常用方法:
                Matcher appendReplacement(StringBuffer sb, String replacement); 
                StringBuffer appendTail(StringBuffer sb);
                int end();
                int end(int group);
                int start();
                int start(int group);
                String group();
                String group(int group);
                int groupCount();
                boolean find();
                boolean find(int start);
                boolean lookingAt();
                boolean matches();
                Pattern patter();
                String replaceAll(String replacement);
                String replaceFirst(String replacement);
                Matcher reset();
                Matcher reset(CharSequence input);
        其中,用于匹配器匹配字符串的方法有:
                    find();/find(int start);  此方法用于在目标字符串中查找 下一个 匹配的子串,找到返回true,重载方法里的参数代表从下标为start的位置开始向后寻找子串。
                    lookingAt();  此方法用于确定目标串的 起始位置 是不是匹配正则表达式,是返回true。
                    matches();  此方法对整个目标串进行匹配,如果满足返回true。
                例:               
                     
                    这个匹配器如果调用m.matches()返回false,因为当前正则表达式只匹配[ab]其中的一个字符;如果调用m.lookingAt(),返回true,当前字符串起始位置就是[ab]中的一个;如果调用m.find()返回true,因为从下标为0的位置向后找,第一位就符合要求;
                    
                    修改目标串,此时调用m.find(2)返回结果位false,因为从下标为2的地方开始向后寻找,找不到可以满足正则表达式的子串。
        用于获得已匹配子串信息的方法:
                    start()/start(int group);   返回当前匹配串的 起点下标/返回当前匹配串指定组的 起点下标       
                    end()/end(int group);   返回当前匹配串的 末尾下标/返回当前匹配串制定组的 末尾下标    注: 坐标为 [start, end)
                    group()/group(int group);  返回当前匹配串的所有内容/返回当前匹配串的指定组的所有内容
                    groupCount();  返回当前匹配串的组的数量
        
                    这些获得子串信息的方法一般搭配find方法使用。打印信息为:
        
        
        用于对匹配串进行操作的方法
                    replaceAll(String replacement);  把目标串里面的所有匹配串都替换成该方法的参数
                    replaceFirst(String replacement);  把目标串里面的第一个匹配串替换成该方法的参数
                    appendReplacement(StringBuffer sb, String replacement);  将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里
                    appendTail(StringBuffer sb); 将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里                  
                    例:
                
        
                    
        其他方法
                    reset()/reset(CharSequence input);  重置匹配器/重置匹配器,并将方法参数设置为目标串。 注:匹配器如果重置了,那么目标串也就重置了,如果使用无参的重置方法,那么重置后的目标串依旧是原来的目标串。
                    pattern();  返回当前的Pattern对象

                例:
            
                    在调用appendTail()方法之前重置匹配器,那么目标串刷新,结果为
            
                    如果调用该代码中有参的那个重置方法,结果为
            


















java.util.regex 包中自带的两个 正则表达式类的使用总结

以下总结,都是从java 7 doc 上得到,以及自己写代码验证的结果 1、java.util.regex.Pattern类 每个本类的对象,代表一个正则表达式的模式 。 public fina...
  • hemeinvyiqiluoben
  • hemeinvyiqiluoben
  • 2015年11月22日 21:15
  • 855

java 正则表达式1

JAVA正则表达式--Pattern和Matcher 现在JDK1.4里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SU...
  • timliang18601860
  • timliang18601860
  • 2011年09月15日 23:12
  • 163

java.util.regex 正则表达式

http://blog.csdn.net/xiazdong/article/details/6793715 正则表达式主要在java.util.regex包中,有Pattern和Ma...
  • victoryckl
  • victoryckl
  • 2011年11月02日 23:36
  • 1375

java.util.regex包的功能

1.简介:   java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。   它包括两个类:Pattern和Matcher Pattern 一个Pattern是...
  • u011393661
  • u011393661
  • 2013年11月22日 18:32
  • 630

java正则表达式(java.util.regex包)

看Hadoop源码,发现了java的正则表达式,以前虽然一直知道这个东西,但是还没yong'gu...
  • qq690388648
  • qq690388648
  • 2014年05月15日 22:01
  • 11507

正则表达式 java.util.regex Pattern

最近写字符串处理程序用到了Java正则表达式。其中写了个  \\s*:\\s*|(?   为了写正则表达式,特意查看了JDK帮助文档,其中有一段: Specia...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月20日 15:50
  • 847

正则表达式袖珍手册——java.util.regex

Java (java.util.regex)作者:张桂权(摘自《正则表达式袖珍手册》一书。译者,张桂权。可以从http://download.csdn.net/source/346896下载完整的译稿...
  • Natureboy520
  • Natureboy520
  • 2008年01月29日 19:48
  • 2690

第11章 使用正则表达式的模式匹配(一)

正则表达式 (regular expression) 是一个描述字符模式的对象。JavaScript 的 RegExp 类表示正则表达式,而 String 和 RegExp 都定义了使用正则表达式进行...
  • pengju_guo
  • pengju_guo
  • 2011年11月29日 13:22
  • 3529

正则表达式与模式匹配

本文介绍正则表达式入门级的一些知识,后续会有所补充。 正则表达式概念 正则表达式元字符 正则表达式的应用   正则表达式概念 正则表达式(regularexpression, RE...
  • Angelahhj
  • Angelahhj
  • 2015年05月05日 17:08
  • 1112

正则表达式的作用

提供更强大的字符串处理能力,测试字符串内的模式,例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或身份证号码模式。即数据验证替换文本可以使用正则表达式来识别文档中的特定文本,完全删除该文本...
  • cui130
  • cui130
  • 2014年07月11日 10:55
  • 1624
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.util.regex包--正则表达式的使用
举报原因:
原因补充:

(最多只允许输入30个字)