正则表达式:
正则表达式用于操作字符串数据,是通过一些特定的符号来体现的。
所以我们为了掌握正则表达式,必须要学习一些符号。
正则表达式简化了书写,但是阅读性较差。
一、正则表达式基础知识
字符类:
[abc]a,b或c(简单类)
[^abc]任何字符除了a,b或c。
[a-zA-Z]a-z或A-Z,两头的字母都包含在内,
[a-z&&[^bc]]a-z,除了bc和[ad-z]等效
预定义字符类:
.任何字符。
\d数组0-9 [0-9]
\D非数字[^0-9]
\s空白字符
\S非空白字符[^\s]
\w单词字符[a-zA-Z_0-9]
\W非单词字符[^\w]
边界匹配器
^行的开头
$行的结尾
\b单词边界
数量词:
X?X,一次或一次也没有。
X*X,0次或多次
X+X,一次或多次
X{n,}X,至少n次
X{n,m}X,至少n次,但是不超过m次
二、正则表达式常见的功能
1.匹配:其实就是String类中的matches方法。
例:匹配手机号码是否正确。
String tel = "13333333333";
String reg ="1[358]\\d{9}";
boolean b = tel.matches(reg);
System.out.println(b);
2.切割:其实就是String类中的split方法。
例:
String str = "xiaoqiangttttwangcaimmmmmzhangsan";
String[] names = str.split("(.)\\1+");
for(String name : names){
System.out.println(name);
}
3.替换:使用的是String类中的replaceAll方法。
注意:一个方法里第一个参数是正则,第二个参数想要使用第一个参数正则中的内容,
可以使用美元符号来表示。
例1:
String str = "xiaoqiangttttwangcaimmmmmzhangsan";
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);//xiaoqiangtwangcaimzhangsan
例2:
String tel = "13312345678";
tel = tel.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3");
4.获取:
需要使用java.uitl.regex中的Pattern对象。
范例:
将正则规则进行对象的封装。
Pattern p = Pattern.compile(regex);
通过正则对象的matcher方法和字符串关联获取要对字符串操作的匹配器对象Matcher。
Matcher m = p.matcher(input);
通过Matcher匹配器对象的方法对字符串进行操作。
boolean b = m.matches();
Matcher中的常用方法:
boolean find();
String group();
intstart();
intend();
例:
String str = "da jia hao ming tian xiu xi shi bu ke neng";
String regex = "\\b[a-z]{3}\\b";
//将正则规则进行对象的封装。
Pattern p = Pattern.compile(regex);
//通过正则对象的matcher方法和字符串关联获取要对字符串操作的匹配器对象Matcher。
Matcher m = p.matcher(str);
//通过Matcher匹配器对象的方法对字符串进行操作。
while(m.find()){
System.out.println(m.group());
System.out.println(m.start()+":"+m.end());
}