用途:
字符串匹配
字符串查找
字符串替换
例如:
IP地址是否正确
从网页中抓取Email地址
从网页中揪出超级连接
类
java.lang.String
java.util.regex.Pattern
java.util.regex.Matcher
首先最简单的正则表达式
package reg;
public class SimpleReg {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("abc".matches("..."));
}
}
一个点代表一个字符, abc刚好3个字符
将String str="a9729"中的数字换位-
str.replaceAll("//d","-");
认识Pattern
Pattern p = Pattern.compile("[a-z]");
匹配一个只有一位字符的串
Pattern p = Pattern.compile("[a-z]{3}");
匹配一个只有3位字符的串
Matcher m = p.matcher("fgh");
//匹配过程中产生的值保存在m中
M.matches();返回true
简写为"fgh".matches("[a-z]{3}");//return true
练习
"a".matches(".");true
"aa".matches("aa");true
"aa".matches("a*");true 代表0个或多个a
"aaaa".matches("a+");+代表一个或多个
"aaaa".matches("a?");?代表0个或一个 false
"".matches("a?");false
"192.168.0.aaa".matches(//d{1,3}//.//d{1,3}//.//d{1,3}//..{1,3}) true
"192".matches("[1][9][2]");
正则表达式范围
一个[]代表匹配一个字符
如"a".matches("[abc]");true
"a".matches("[^abc]");表示除了abc外的任意字母,false
"A".matches("a-zA-Z")="A".matches("[a-z]|[A-Z]"); true
"A".matches("[A-Z]&&[RFG]");表示在A-Z范围内,且在RFG里
认识/d 数字,/D非数字,/s一个空白字符,/w表示构成单词的字符a-z,A-Z,_
/W 和/w相反
"a_8".matches(/w{3});
"abc888&^%".matches("[a-z]{1,3}//d{3}[&^%]+")
Matches find lookingAt
Pattern p = Pattern.complie("//d{3,5}");
String s = "123-34445-234-00";
Matcher m =p.matcher(s);
P.matches(); ->false
M.reset();
把p.matches();
M.find();找子串 return true
找到后会把123去掉
接着来
M.find();
M.start() m.end()相匹配的子串位置
会把344去了
m.lookingAt();每次重头上开始找
Pattern p = Pattern.complie("java",Pattern.Case_INSENSITIVE);
Matcher m =p.matcher("java Java jAv");
While(m.find())
{
System.out.println(m.group());
}
Pattern p =Pattern.compile("//(d{3,5})([a-z]{2})");
String s ="123aa-34324-bb-234cc-00";
Matcher m = p.matcher(s);
While(m.find)
{
输出匹配的子串 M.group(1);
只打印数字
//m.group(2);
}
去除eclipse 中注释行 /\*\s+\d{0,3}\s+\*/