Pattern funcElemPattern = Pattern.compile("(\\d+):(\\w+) (\\w+)");
String line = "oneway void LoginRsp(1:LSError lsErr, 2:string recoverToken, 3:i64 key)";
Matcher matcher = funcElemPattern.matcher(line);
while(matcher.find()){
System.out.println(matcher.groupCount());
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
}
先上示例代码,主要用途是想提取thrift RPC调用的参数,每个参数的id,参数类型,参数名字。
1. 是java需要转义字符,所以类似\d+需要写成\\d+才可以;
2. 对于匹配,需要调用pattern.matcher函数。
3. 调用matcher得到一个matcher对象后,需要调用find,find函数的意思是寻找下一个匹配,第一次调用就是寻找第一个匹配
4. groupcount指的是匹配组的内容有几个,因为pattern有三个小括号,所以这里是3
5. 提取里面真正的内容是通过调用matcher.group函数,其中0是整个匹配,并非匹配组里的第一个内容,需要注意。
最终打印结果如下:
3
1:LSError lsErr
1
LSError
lsErr
3
2:string recoverToken
2
string
recoverToken
3
3:i64 key
3
i64
key