m.matches();//true 如果匹配返回true "asf".matches("[a-z]{3}")也可以实现,但上一个快,因为先编译了
二、初识. * + ? {}
.:一个字符
*:0个或多个
+:1个或多个
?:1个或0个
{3}:出现3次
{3,}:至少出现3次
{3,4}:至少3次,不超过4次
print("a".matches("."));
print("aa".matches("aa"));
print("aaaa".matches("a*"));
print("aaaa".matches("a+"));
print("".matches("a*"));
print("aaaa".matches("a?"));
print("".matches("a?"));
print("a".matches("a?"));
print("122432323".matches("\\d{3,100}"));
print("192.168.aaa.0".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
print("192".matches("[0-2][0-9][0-2]"));
结果:true、true、true、true、true、false、true、true、true、false、true
三、范围
[abc]:是abc这个范围的
[^abc]:除了abc之外的
[a-zA-Z]:a-z或者是A-Z的
[a-z]|[A-Z]:a-z或者A-Z的
[a-z[A-Z]]:a-z或者A-Z的 三种写法
[a-z&&[RFG]]:a-z并且是RFG内的
print("a".matches("[abc]"));
print("a".matches("[^abc]"));
print("A".matches("[a-zA-Z]"));
print("A".matches("[a-z]|[A-Z]"));
print("A".matches("[a-z[A-Z]]"));
print("R".matches("[A-Z&&[RFG]]"));
结果:true、false、true、true、true、true
四、其他MetaCharacter
\d: 一个数字 [0-9]
\D:[^0-9]
\s:一个空白字符,[ \t\n\r\f\x0B] 空格 \t等
\S:取反
\w:[a-zA-Z_0-9]
\W:取反
print(" \n\f\t".matches("\\s{4}"));
print(" ".matches("\\S"));
print("a_8".matches("\\w{3}"));
print("abc888*^%".matches("[a-z]{3}\\d+[*%^]+"));
print("\\".matches("\\\\"));//匹配一个\
结果:true、false、true、true、true、true
五、边界处理
^:开始
$:结尾
\b:一个单词的边界 例如空格,特殊字符,空白字符,换行等
print("hello sir".matches("^h.*"));
print("hello sir".matches(".*ir$"));
print("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
print("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
结果:true、true、true、false
六、find和lookingAt start和end【起始位置和结束位置】
//find和lookingAt
Pattern pattern = Pattern.compile("\\d{3,5}");
String s = "123-23234-432-00";
Matcher m = pattern.matcher(s);
//匹配整个字符串
print(m.matches());//false 会把123-吃掉
m.reset(); //把吃掉的字符还原回来
//找子串
print(m.find());//23234
print(m.start()+"_"+m.end());//0-3 end是结尾的后一位
print(m.find());//432
print(m.start()+"_"+m.end());//4-9
print(m.find());//00
print(m.start()+"_"+m.end());//10-13
print(m.find());//什么都没有
//每次都从开头开始找
print(m.lookingAt());
print(m.lookingAt());
七、替换
Pattern pattern = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher("java Java jaVa jAva JAVA sss");
print(m.replaceAll("JAVA"));
StringBuffer sb = new StringBuffer();
int i=0;
while(m.find()){
i++;
if(i%2==0){
m.appendReplacement(sb, "java");
}else{
m.appendReplacement(sb, "JAVA");
}
}
m.appendTail(sb);
print(sb); //输出:JAVA java JAVA java JAVA sss
八、分组 group
Pattern pattern = Pattern.compile("(\\d{3})([a-z]{2})");
String s = "123aa-444ff-333gg";
Matcher m = pattern.matcher(s);
while(m.find()){
print(m.group());//符合条件的全部子串
print(m.group(1));//符合条件的全部数字
print(m.group(2));//符合条件的全部字母
}