JAVA学习之正则表达式

一、简介
用途:字符串匹配(字符匹配)、字符串查找、字符串替换
类:java.lang.String   java.util.regex.Pattern   java.util.regex.Matcher
例1:"abc".matches("...")  //true 是否是3个字符
例2:"a1234a".replaceAll("\\d", "-") //a----a \d代表一个数字  在java中\d为转义字符,需要用\\d
例3:
Pattern p = Pattern.compile("[a-z]{3}"); //编译规则  3个字符是a到z的
Matcher m = p.Matcher("asf"); //asf进行匹配

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));//符合条件的全部字母
}

你可能感兴趣的:(JAVA学习之正则表达式)