正则表达式
1. 例子1——字符串匹配
使用String类的matches()方法
需求
- 要求code为5~10位数
- 要求code全部为数字
- 要求code不能以0开头
代码
String regex="[1-9][0-9]{4,9}";
String code1="1233424";
String code2="1233424d";
String code3="01233424";
String code4="12334244323";
System.out.println(code1.matches(regex));
System.out.println(code2.matches(regex));
System.out.println(code3.matches(regex));
System.out.println(code4.matches(regex));
2. 例子2——字符串切割
使用String类的split()方法
需求1
将不同空格数量间隔的字符串分割
代码1
String str="xiaoqiang xiaoming dawang xiaohong";
String regex=" +";
需求2
将出现的重复2到多次的字母作为分隔符分割
代码2
String str="xiaomingttttttxiaohongggggxiaozhangzzzxiaochao";
String regex="(.)\\1+";
- 这里是将字符串中的tttttt、ggggg、zzz作为分割符号进行分割。
- 这里用到了组的概念,用()括起来的内部东西就视作一个组,从1开始编号,使用\1这样1的转义来表示1组所匹配到的字符串。
- 对于正则表达式的转义一般都是加\,这样是为了不和字符串本身的转义冲突
- 上述匹配工作原理是,第一个字符匹配了x,之后再用组1引用这个x,发现再次出现次数不是1次或者1次以上,于是重新匹配下一个i,发现也不是,就继续匹配,一直匹配到了t,发现满足,于是分割。以此类推。
3. 例子3——字符串替换
使用String类的replaceAll()方法
需求
将电话号码4~7位替换为*符号
代码
String str="17333334464";
String ans=str.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
- 这里的$符号表示从上一个参数中存取的正则表达式分组中获取元素
4. 例子4——字符串获取
使用Pattern类
需求
获取一段字符中三个字母的单词
代码
String str="da jia hao, wo jiao lu ben wei";
Pattern p=Pattern.compile("\\b[a-zA-Z]{3}\\b");
Matcher match=p.matcher(str);
while(match.find()) {
System.out.println(match.group());
System.out.println(match.start()+" : "+match.end());
}
其实前面三个例子,本质上都是使用了Pattern类相关的各种方法