match pattern

要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念。捕获组也就是Pattern中以括号对“()”分割出的子Pattern。至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分。
          捕获组可以通过从左到右计算其开括号来编号。例如,在表达式  "(x)(y\\w*)(z)"  中,存在三个这样的组:   
1.   x
2.   y\\w*
3.   z
组零始终代表整个表达式。
之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器获取。
以  (?) 开头的组是纯的 非捕获 组,它不捕获文本,也不针对组合计进行计数。

Example:

package pattern;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class testRegex {
    public static void main(String[] args) {
        String regex = "(x)(y\\w*)(z)";

        String input = "exy123z,xy456z";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(input);

        while (m.find()) {
            System.out.println(m.group(2));
        }
    }
}

运行结果:
y123

y456



一、使用matches()

  1. Pattern p = Pattern.compile("正则表达式");
  2. Matcher m = p.matcher("预匹配的字符串");
  3. if(m.matches()) {
  4.     m.group(1)//匹配第1项
  5.     m.group(2)//匹配第2项
  6. }

二、使用find()

public static void main(String[] args) {      
        int count = 0;      
         String regEx = "[\\u4e00-\\u9fa5]";  
         String str = "中文fdas ";    
         Pattern p = Pattern.compile(regEx);      
         Matcher m = p.matcher(str);      
        while (m.find()) { 
                 count = count + 1;   
                 System.out.println(m.groupCount());  
                 System.out.println(m.group());                    
         }      
         System.out.println("共有 " + count + "个 ");      
     }     

结果:

0

0

共2个




花了两个小时才搞明白,有点儿笨:P 首先弄明白 Java 的正则表达式中捕获组的概念,也就是以括号对“()”分割出的子Pattern,为什么要用到子模式呢?这是为了能在一次匹配中找出关心部分,例如: input: abbc pattern:a(b*)c group0: a(b*)c group1:(b*) 整个
花了两个小时才搞明白,有点儿笨:P

首先弄明白 Java 的正则表达式中捕获组的概念,也就是以括号对“()”分割出的子Pattern,为什么要用到子模式呢?这是为了能在一次匹配中找出关心部分,例如:
input: abbc
pattern:a(b*)c
group0: a(b*)c
group1:(b*)

整个pattern是可以匹配abbc的,group()方法就是获得当前查找里面整个pattern所匹配的子序列,所以你可以通过group()找到“abbc”;

与此同时,我还对其中的b的个数感兴趣,就可以通过group1来得到关于(b*)的匹配情况,group(i)就是获得当前查找里面指定的捕获组所匹配的子序列,所以你可以通过group(0)来找到“bb”;

上面说清楚了,groupCount()的含义就很容易明白了,它并不是指在输入序列中Pattern总共匹配了多少次,而是指的捕获组的个数,当然它不对“整个pattern”计数,而只对“子Pattern”计数,如上例中groupCount()返回1,而如果我们将input改为“abbc abbc abbc”,——有三次匹配——groupCount()还是返回1 ;

你可能感兴趣的:(match pattern)