/*正则表达式:符合一定规则的表达式(API方法中参数为regex的为正则)
作用:用于专门操作字符串,可以简化对字符串的复杂操作
需求:对QQ号码进行校验,要求:5-15位,0不能开头
当用字符串的方法去实现时比较麻烦,而正则表达式做起来比较简便
*/
public class Test1 {
public static void main(String[] args) {
String regex="[1-9][0-9]{4,14}";//第一个数为1至9,4到14个0至9的数
String qq="12345";
boolean flag=qq.matches(regex);
if(flag)
System.out.println("OK");
else
System.out.println("不合法");
}
}
/*具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串
[abc] 代表a或b或c
2.切割:spit
3.替换:replace
*/
public class Test2 {
public static void main(String[] args) {
replaceAll();
}
public static void replaceAll(){
String regex="(.)\\1+";//
String str="aaafdddkkkdasd";
str=str.replaceAll(regex,"$1");//$1表示获取组1的值
System.out.println(str);//afdkdasd
}
public static void spitDemo(){
String regex=" +";//当有多个空格时,用+表示
String str="aa d cd dasd";
String[] arr=str.split(regex);//按照多个空格切割
for(String s:arr){
System.out.println(s);//四个
}
//按照叠词完成切割
regex="(.)\\1+";//(.)表示组 .表示任意字符 1+表示多个和1组相同的字符
str="avvbcffffdasddz";
String[] arr2=str.split(regex);
for(String s:arr2){
System.out.println(s);
}
}
public static void matchesDemo(){
String regex="[1][358]\\d{9}";
String str="135425568755";
System.out.println(str.matches(regex));
}
}
/*4.获取
其实String类中的matches方法,用的就是Pattern和Matcher对象来完成的
只不过被String的方法封装后,用起来较为简单,但是功能却单一
*/
import java.util.regex.*;
public class Test3 {//获取单词数为4个的单词
public static void main(String[] args) {
String str="ming tian jiu yao fang jia le,da jia";
String reg="\\b[a-z]{4}\\b";//\b代表单词边界
Pattern p=Pattern.compile(reg);//将规则封装成对象
Matcher m=p.matcher(str);//让正则对象和要作用的字符串相关联,获取匹配器对象
while(m.find()){//进行符合规则的子串查找
System.out.println(m.start()+"..."+m.end());//符合要求的索引
System.out.println(m.group());//获取匹配后结构过(类似于迭代器)
}
}
}