1Pattern
- static Pattern compile(String regex)将给定的正则表达式编译到模式中。
- Matcher matcher(CharSequence input)创建匹配给定输入与此模式的匹配器。
- boolean matches()尝试将整个区域与模式匹配。
- String[] split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。
String regexPattern = "\\d+";
static Pattern compile(String regex) 将给定的正则表达式编译到模式中。 regex正则
Pattern p = Pattern.compile(regexPattern);
Matcher matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。 ,input匹配源
Matcher m = p.matcher("12312331-");
boolean matches() 尝试将整个区域与模式匹配。
System.out.println("----------boolean matches()尝试将整个区域与模式匹配。 ------");
System.out.println("是否匹配:" + m.matches());
String[] split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。
System.out.println("------- //String[] split(CharSequence input)分割返回数组------");
String[] str=p.split("aaaaaa:22222bbbbbbb:3333333ccccccc:4444444");
for (String string : str) {
System.out.println(string);
}
static boolean matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。 用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
System.out.println("----boolean matches() 尝试将整个区域与模式匹配。 ----------");
System.out.println(Pattern.matches("\\d+","2223"));//返回true
System.out.println(Pattern.matches("\\d+","2334dd"));//返回false,需要匹配到所有字符串才能返回true,这里dd不能匹配到
System.out.println(Pattern.matches("\\d+","we233"));//返回false,需要匹配到所有字符串才能返回true,这里we不能匹配到
输出:
----------boolean matches()尝试将整个区域与模式匹配。 ------
是否匹配:false
------- //String[] split(CharSequence input)分割返回数组------
aaaaaa:
bbbbbbb:
ccccccc:
----boolean matches() 尝试将整个区域与模式匹配。 ----------
true
false
false
2Matcher类
- lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。start()返回第一个匹配字符的索引。
- end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 返回最后匹配字符之后的偏移量。
- group()返回匹配到的子字符串
//lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
System.out.println("-------//lookingAt()------");
Matcher m1=p.matcher("23ssss");
System.out.println(m1.lookingAt());//返回true,因为\d+匹配到了前面的23
Matcher m2=p.matcher("sss23");
System.out.println(m2.lookingAt());//返回false,因为\d+不能匹配前面的sss
//public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。
// 此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
System.out.println("-------public boolean find()-----");
Matcher mm=p.matcher("22bb23");
System.out.println(mm.find());//返回true
Matcher mm2=p.matcher("aa2223");
System.out.println(mm2.find());//返回true
Matcher mm3=p.matcher("aa2223bb");
System.out.println(mm3.find());//返回true
Matcher mm4=p.matcher("aabb");
System.out.println(mm4.find());//返回false
// start()返回第一个匹配字符的索引。
// end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 返回最后匹配字符之后的偏移量。
//group()返回匹配到的子字符串
System.out.println("------find----start----end---group-");
Matcher mmm=p.matcher("aaaabbbb3333ddd");
System.out.println(mmm.find());//匹配3333 返回true
System.out.println(mmm.start());//返回8
System.out.println(mmm.end());//返回12,返回的是3333后的索引号
System.out.println(mmm.group());//返回3333
System.out.println("---");
Matcher mmm2=p.matcher("11bb");
System.out.println(mmm2.lookingAt()); //匹配11
System.out.println(mmm2.start()); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
System.out.println(mmm2.end()); //返回2
System.out.println(mmm2.group()); //返回11
System.out.println("---");
Matcher mmm3=p.matcher("222344");
System.out.println(mmm3.matches()); //匹配整个字符串
System.out.println(mmm3.start()); //返回0
System.out.println(mmm3.end()); //返回6,原因相信大家也清楚了,因为matches()需要匹配所有字符串
System.out.println(mmm3.group()); //返回222344
输出:
-------//lookingAt()------
true
false
-------public boolean find()-----
true
true
true
false
------find----start----end---group-
true
8
12
3333
---
true
0
2
11
---
true
0
6
222344
3正则的高级使用
Pattern p1=Pattern.compile("\\d+");
Matcher m1=p1.matcher("aaaaa:1111 bbbbb:22222 cccccc:ddddd:23d");
while(m1.find()) {
System.out.println(m1.group());
}
输出:
1111
22222
23