您的位置:首页 > 运维架构

pattern matcher的简单用法举例

2014-04-27 16:57 281 查看
Java中正则表达式匹配的用处在Map-reduce的书写方法中十分灵活,map方法经常需要用到正则匹配,简单用法可见以下示例:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) throws ClassNotFoundException {

         

        String testText1 = "This is a regular test";

        String testText2 = "regular";      

        

        //1. 第一种,适合一次性编译的方式,每次都需要编译,效率较低。

        System.out.println(Pattern.matches("re.*lar", testText2));

        

        //2. 第二种,先编译的方式        

        Pattern p1 = Pattern.compile("REGULAR", Pattern.CASE_INSENSITIVE);  

        Pattern p2 = Pattern.compile("T.*t");

        Matcher m1 = p1.matcher(testText1);  

        Matcher m2 = p2.matcher(testText1);

        

        //matches方法是对整个字符中的匹配

        if(m1.matches()){

            System.out.println("matches the string.");  

        } else {  

            System.out.println("cannot match the string.");  

        }  

        if(m2.matches()){

            System.out.println("matches the string.");  

        } else {  

            System.out.println("cannot match the string.");  

        }

                

        //find方法是对子字符中的匹配

        if (m1.find()) {  

            System.out.println("finds the word.");  

        } else {  

            System.out.println("cannot find the word.");  

        }  

        

    }

}

另外,可以用group管理匹配的分组,示例如下:

定义:

        Pattern p1 = Pattern.compile("(r.*r) (t.*t)",CASE_INSENSITIVE | Pattern.DOTALL);  //可以同时定义两个用|隔开。

        Matcher m = p1.matcher(testText1);

       此时m1.groupCount()返回为2个组,即(r.*r) 和(t.*t),可以通过m.group(1)和m.group(2)返回两个不同的匹配组的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息