现在的位置: 首页 > 综合 > 正文

JAVA中正则表达式的简单应用

2013年12月09日 ⁄ 综合 ⁄ 共 2043字 ⁄ 字号 评论关闭
基本应用:

//生成一个模式
Pattern p = Pattern.compile("a{1,3}b{1,3}");
//匹配一个母串
Matcher m = p.matcher("abdbdaabddfabbc");
//查找是否匹配,此操作是下列各操作的前提操作,若不进行查找,下列各操作均会出现异常。
Boolean  b = m.find());   ----true
int start = matcher.start();  //查找匹配串的起始字母的位置 --- 0
int end = matcher.end();   //查找匹配串的结束字母的位置 --- 2

Boolean  b = m.find());  //查找下一个匹配串  ---true

Boolean  b = m.matches()  //查找是否完全匹配  ----false
Boolean  b = m.lookingAt()  //查找是否从头匹配  ---true
//一个模式可以更换其匹配的母串:   m.reset();

可以利用“全部替换”功能将空白符替换为单一空格:

 String patternStr = "//s+";
 String replaceStr = " ";
 Pattern pattern = Pattern.compile(patternStr);
 Matcher matcher = pattern.matcher(“a   b       c   d”);
 return matcher.replaceAll(replaceStr);

高级的替换,每次替换的内容不一样:
        Pattern p = Pattern.compile("a{1,3}b{1,3}");
        Matcher m = p.matcher("abdbdaabddfabbc");
        StringBuffer sb = new StringBuffer();
        boolean f = m.find();
        int i = 0;
        while(f){
            m.appendReplacement(sb, i+"");
            i++;
            f = m.find();
        }
            m.appendTail(sb);
        System.out.println(sb.toString());

分组匹配:

//一个复杂的正则表达式,可以根据括号来分成若干个组,你在进行匹配的时候,可以使用全部内容进行匹配,
//也可以使用其中的某一个组进行匹配。组的编号从0开始,0表示全部,1表示第一组,2表示第二组……
    CharSequence inputStr = "abbabcd";
    String patternStr = "(a(b*))+(c*)";
   
    // Compile and use regular expression
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(inputStr);
    boolean matchFound = matcher.find();
   
    if (matchFound) {
        // Get all groups for this match
        for (int i=0; i<=matcher.groupCount(); i++) {
            String groupStr = matcher.group(i);
        }
    }
//对于上述例子,共分3组分别是(a(b*))、(b*)、(c*)
//本来第一组应该匹配abb,但是它发现bb和第二组完全匹配,本着互不干涉的原则,
//第一组只能匹配a,这是分组匹配时一个需要注意的地方。

在求子串起始位置和结束位置时需要注意的地方:

matcher.find();
matcher.end();  //是按照整个模式进行匹配后,子串的结束位置

matcher.find();
matcher.grout(1);
matcher.end();  //是按照组1匹配后,子串的结束位置。

在文件输入流中进行匹配,不合要求的不读取:

        String filename = "infile.txt";
        String pattern = "pattern";
        BufferedReader rd = new BufferedReader(new FileReader(filename));
        rd = new BufferedReader(new RegexReader(rd, pattern));
   
        // Retrieve all lines that match pattern
        String line = null;
        while ((line = rd.readLine()) != null) {
            // line matches the pattern

抱歉!评论已关闭.