正则表达式使用总结

 

      如果想要正则匹配 name=wangna age=20 ,并提取出 wangna,20这两个值,就可以写表达式,把要提取的内容写在()里的子表达式里,使用matcher.group() 进行提取。

public class ThreadTest {

public static void main(String[] args) {

String reg ="name=(.+)\\s+age=(.+)";

Pattern pat = Pattern.compile(reg);

String msg= "name=wangna age=20";

if (msg != null && pat != null) {
//使用写好的pat 匹配 待匹配的字符串
Matcher matcher = pat.matcher(msg);

//如果待匹配的字符串中,有可以匹配此pat的 字符串
if (matcher.find()) {

//matcher.groupCount() 代表匹配到的子表到式的个数+1,1代表matcher.group(0)匹配到的整个字符串
for (int i = 0; i <= matcher.groupCount(); i++) {

//得到第0组 是匹配到的整个表达式,第一组是匹配到的第一个子表达式的内容,依此类推。
System.out.println("Group :"+matcher.group(i));


}
}
}


String str = "Hello,World!";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println("Group 0:"+matcher.group(0));//得到第0组——整个匹配
System.out.println("Group 1:"+matcher.group(1));//得到第一组匹配——与(or)匹配的
System.out.println("Group 2:"+matcher.group(2));//得到第二组匹配——与(ld!)匹配的,组也就是子表达式
System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//总匹配的索引
System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//第一组匹配的索引
System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//第二组匹配的索引
System.out.println(str.substring(matcher.start(0),matcher.end(1)));//从总匹配开始索引到第1组匹配的结束索引之间子串——Wor
}
}
}
打印输出结果:

Group :name=wangna age=20
Group :wangna
Group :20
Group 0:World!
Group 1:or
Group 2:ld!
Start 0:6 End 0:12
Start 1:7 End 1:9
Start 2:9 End 2:12
Wor



正则表达式书写样例:


<01> wangna: oct 31 09:05:00 msg: name=wangna age=20

private static String reg ="^<([0-9]+)>\\s+([A-Za-z]+):\\s+([A-Za-z]+\\s+\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})\\s+([A-Za-z]+):(.*)";
private static Pattern pat = Pattern.compile(reg);

这个表达式可以把 01 , wangna ,Mar 31 09:05:00 , msgbody, id=3547328872 name=wangna age=20 这几个字符串提取出来。

可以验证正则表达式的网站:
http://www.matools.com/map

对特殊符号转义的时候,在上面的网站上使用一个\就可以,但在java里需要两个\\。

posted on 2019-12-16 16:51  luckyna  阅读(201)  评论(0编辑  收藏  举报

导航