正则表达式:符合一定规则的表达式
功能:用于专门操作字符串
特点:用于一些特定的符号来表示一定的代码操作,这样简化书写
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性极差
规则:
[abc]//a 或b 或c
[^abc]//除了abc
[a-d[m-p]]//a-d 或者m-p(并集)
[a-e&&[def]]//d或者e(交集)
.任意字符
\d 数字[0-9] //因为java中"\"是转义字符所以\\d表示数字
\D 非数子[^0-9]
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符
功能:用于专门操作字符串
特点:用于一些特定的符号来表示一定的代码操作,这样简化书写
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性极差
规则:
[abc]//a 或b 或c
[^abc]//除了abc
[a-d[m-p]]//a-d 或者m-p(并集)
[a-e&&[def]]//d或者e(交集)
.任意字符
\d 数字[0-9] //因为java中"\"是转义字符所以\\d表示数字
\D 非数子[^0-9]
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符
数量词:
?表示一次或一次也没有
* 表示0次或多次
+:一次或多次
{n}恰好n次
{n,m}
?表示一次或一次也没有
* 表示0次或多次
+:一次或多次
{n}恰好n次
{n,m}
具体操作:
1、匹配:String matches()方法
2、切割:split()方法
正则表达式里用.切割时,要写\\. 因为.在正则表达式里表示任意字符
按照叠词完成切割 String reg="(.)\\1" \\1 后一个字符与前一个字符一样 \\1+ 表示出现一次或多次
正则表达式里用.切割时,要写\\. 因为.在正则表达式里表示任意字符
按照叠词完成切割 String reg="(.)\\1" \\1 后一个字符与前一个字符一样 \\1+ 表示出现一次或多次
3、替换:replaceAll()
叠词里替换成单个用到$1
String str="aassddexdddkossskck";
String reg="(.)\\1+";//连续出现多次的词
String newstr="$1";//只用一个词替换
str=str.replaceAll(reg, newstr);
System.out.println(str);
叠词里替换成单个用到$1
String str="aassddexdddkossskck";
String reg="(.)\\1+";//连续出现多次的词
String newstr="$1";//只用一个词替换
str=str.replaceAll(reg, newstr);
System.out.println(str);
4、获取:将字符串中符合规则的子串取出
操作步骤:m.find();m.group();
操作步骤:m.find();m.group();
String str="ni hao wo shi li gui fang";
String reg="\\b[a-z]{2}\\b";//\\b 单词边界
Pattern p=Pattern.compile(reg);//将规则封装成pattern对象
Matcher m=p.matcher(str);//让正则对象和要作用的字符串关联起来
String reg="\\b[a-z]{2}\\b";//\\b 单词边界
Pattern p=Pattern.compile(reg);//将规则封装成pattern对象
Matcher m=p.matcher(str);//让正则对象和要作用的字符串关联起来
while(m.find()){ //m.find() 将该规则作用到字符串上 并进行符合规则的字符串查找
System.out.println(m.group());// 获取匹配后的结果
System.out.println(m.start()+"...."+m.end());//角标
}
System.out.println(m.group());// 获取匹配后的结果
System.out.println(m.start()+"...."+m.end());//角标
}
思路:
1、如果只想知道该字符是对是错 使用匹配
2、想要将已有的字符串变成另一个字符串 替换
3、想要按照自定义的方式将字符串变成多个字符串 用切割
4、想要拿到符合规则的字符串 获取
可以用Integert.paseInt();Long.paseLong();//来判断只能是数字 Long类型的位数高