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 中正则表达式的运用 Java.util.regex.*

Java 中正则表达式的运用 Java.util.regex.* 看代码: /** * 版权所有 (c) 2016,小明有限公司   */ package RegexTest; imp...

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

看Hadoop源码,发现了java的正则表达式,以前虽然一直知道这个东西,但是还没yong'gu...

java.util.regex 正则表达式

http://blog.csdn.net/xiazdong/article/details/6793715 正则表达式主要在java.util.regex包中,有Pattern和Ma...

Java正则表达式,java.util.regex

1.正则表达式(regular expression)  正则表达式(regular expression)是根据字符串集合内每个字符串共享的共同特性来描述字符串集合的一种途径。正则表达式可以用...

C++ regex 正则表达式的使用

在c++中,有三种正则可以选择使用,C ++regex,C regex,boost regex ,如果在windows下开发c++,默认不支持后面两种正则,如果想快速应用,显然C++ regex 比较...
  • cwqcwk1
  • cwqcwk1
  • 2014年02月09日 19:32
  • 25260

java.util.regex.Pattern类使用

public final class Pattern extends Object implements Serializable 正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此...
  • aerchi
  • aerchi
  • 2012年04月09日 12:47
  • 10580

Eclipse正则表达式插件 Regex Util(转自开源社区)

Eclipse正则表达式插件 Regex Util Eclipse plugin for testing/editing regular expressions fl...

eclipse正则表达式插件regex util

无意中发现的一个eclipse插件regexuti,非常好用,很方便,推介给大家 如图所示,只要将需要匹配的字符串粘贴在下面,然后在上面的输入框内输入自己的正则表达式,就能高亮度显示匹配到的部分,...

java中split(regex)使用中要注意的问题:正则表达式

比如我在项目中遇到的(,),.,|,*等等类的符号: String area="(30.13206313822174, 120.4156494140625)(29.87637380707133, 1...
  • undoner
  • undoner
  • 2013年09月18日 10:21
  • 1624

C#正则表达式的Regex类用法

[代码] c#代码01/// 02/// 检查字符串中是否有“孙权”这个敏感词03/// 04publicvoidIsMatchDemo()05{06    stringsource = "刘备A...
  • gd2008
  • gd2008
  • 2011年02月11日 11:49
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.util.regex包--正则表达式的使用
举报原因:
原因补充:

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