正则表达式

来源:互联网 发布:mysql num rows 编辑:程序博客网 时间:2024/06/07 01:59
在实际的操作中,为了方便用户使用正则往往很少去直接使用Matcher或Pattern类,而使用String类,在String类中提供了以下的方法用于正则的支持:
1.验证:public boolean matches(String regex)
2.替换:public String replaceAll(String regex,String replacement)

3.拆分:public String[] split(String regex)


//简单认识
/*
System.out.println("abc".matches("..."));
System.out.println("a234a".replaceAll("\\d", "-"));
Pattern p = Pattern.compile("[a-z]{3}");
Matcher m = p.matcher("abc");
System.out.println(m.matches());
//等价于   "abc".matches("[a-z]{3}");
*/


//初步认识
/*
一个"." 代表一个字符(包括字母、@、#、%等)
"\\d" 代表一位数字
一个"*" 代表出现0次或多次
一个"+" 代表出现1次或多次
一个"?" 代表出现1次或0次

X{n} 表示X正好出现n次
X{n,} 表示X至少出现n次
X{n,m} 表示X至少出现n次,至多出现m次
*/

//范围 []表示一个范围
/*
System.out.println("a".matches("[abc]"));//匹配abc三个字符中的一个
System.out.println("a".matches("[^abc]"));//匹配除abc三个字符之外的其他
System.out.println("A".matches("[a-zA-Z]"));
System.out.println("R".matches("[A-Z&&[RFG]]"));//匹配A到Z之中且是RFG之中的
*/


//认识   \s \w \d
/*
\d 代表:[0-9]
\D 代表:[^0-9]
\s 代表:空白字符
\S 代表:[^\s]
\w 代表:构成单词字符[a-zA-Z_0-9]
\W 代表:[^\w]

System.out.println(" \n\r\t".matches("\\s{4}"));
System.out.println("a_8".matches("\\w{3}"));
System.out.println("\\".matches("\\\\"));
*/


//POSIX Style
// System.out.println("a".matches("\\p{Lower}"));//匹配英文小写字母


//边界匹配
/*
System.out.println("hello sir".matches("^h.*"));//以h开头
System.out.println("hello sir".matches(".*ir$"));//以ir结尾
System.out.println("hello sir".matches("^h[a-z]{1,3}o\\b.*"));// \b表示单词边界
*/


//matches find lookingAt
/*
matches 永远是对整个字符串进行匹配
find 是找子串 (匹配完一小段就吃掉,从后面再找)
lookingAt 每次都从头开始找

Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-45543-234-00";
Matcher m = p.matcher(s);
System.out.println(m.matches());
m.reset();
System.out.println(m.find());//true
System.out.println(m.find());//true
System.out.println(m.find());//true
System.out.println(m.find());//false
System.out.println(m.lookingAt());//true
//若能找到子串,可用start()和end()找到匹配位置
System.out.println(m.start()+"-"+m.end());
*/


//字符串替换
/*
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVA ILOVEjaVA dsafda");
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);
System.out.println(sb);
*/


//分组  (看"()")
/*
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
String s = "123aa-34534bb-234cc-00";
Matcher m = p.matcher(s);
while(m.find()){//分组时若用1,2等数字表示第n个左半括号
// System.out.println(m.group());
// System.out.println(m.group(1));
System.out.println(m.group(2));
}
*/


//qulifiers 修定词 限定符
/*
// Pattern p = Pattern.compile("(.{3,10})[0-9]");//先吃进10个,倒着找
// Pattern p = Pattern.compile("(.{3,10}?)[0-9]");//先吃进3个,顺着找
Pattern p = Pattern.compile("(.{3,10}+)[0-9]");//直接吃进10个,不再找
String s = "aaaa5bbbb6";
Matcher m = p.matcher(s);
if(m.find())
System.out.println(m.start()+"-"+m.end());
else
System.out.println("not match");
*/


//补充
/*
// Pattern p = Pattern.compile(".{3}(?=a)");//结尾是a,但并不捕获a
// Pattern p = Pattern.compile(".{3}(?<=a)");//从后往前数,结尾是a的
Pattern p = Pattern.compile(".{3}(?<!=a)");//从后往前数,结尾不是a的
String s = "444a66b";
Matcher m = p.matcher(s);
while(m.find())
System.out.println(m.group());
*/


//flags的简写
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
System.out.println("java".matches("(?i)(java)"));
//?i等价于Pattern.CASE_INSENSITIVE