正则表达式
基本规则
/*
- 汉字的起始编码:"\u4e00"
- 汉字的截止编码:"\u9fa5"
- 正则表达式:用一组特殊的字符描述的一个特殊的格式-类似于公式
- 作用:匹配一个字符串是否满足格式要求
- []表示一个字符,这个字符是方括号中的字符。[abc]为其中的a或b或c
- []不能是框中的字符,能表示的是除框中的字符[abc]除abc以外的元素
- [-]是一个字符到另一个字符的范围,[a-z]从a到z
- 除去一个部分[ad-z]除去bc
- 预定义字符集:
- . 任意一个字符
- \d 任意一个数字字符[0-9]
- \w 单词字符[a-zA-Z0-9]
- \s 空白字符[\t\n\x0B\f\r]
- \D 非数字字符
- \W 非单词字符
- 数量词见表格
- 全字符匹配:1$
- 正则表达式只关心格式是否正确不关心内容是否有效
*/
public class Demo {
public static void main(String[] args){
for (char c = '\u4e00', i = 0;c <= '\u9fa5'; c++,i++){
System.out.println(c);
if(i%50==0){
System.out.println();//换行
}
}
}
}
正则表达式的应用
字符串支持正则表达式的方法
1:匹配格式
public static void main(String[] args){
/*
* 邮箱地址
* [a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z0-9]+)+
*/
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9]+)+";
//"/"的地方在里面要+/
//转义字符间的冲突
System.out.println(regex);
//输出[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z0-9]+)+
String mail = "dacsac@dcdvd.com.cn";
/*
* boolean matches(String regex)
* 使用给定的正则表达式验证当前字符串是否满足格式要求
* 满足返回true
*/
boolean match = mail.matches(regex);
if(match){
System.out.println("是邮箱");
}else{
System.out.println("不是邮箱");
}
//主义match是全匹配自己加上^
//要想部分匹配手动加上.*任意部分匹配
}
2.身份证号验证
/*
* 先写归纳相同点:
* 先是一个15位,后面加一个可有可无的3位用结尾'?'表示,其中最后一位是数字或x
* \d{15}(\d{2}[0-9xX])?
* 注意'\'的使用在使用时需要多加'\'
*/
String regex = "\\d{15}(\\d{2}[0-9xX])?";
String id = "112155598766123587";
if(id.matches(regex)){
System.out.println("是身份证号");
}else{
System.out.println("不是身份证号");
}
}
3.String split(String regex)
- 将字符串中满足正则表达式的部分拆分
` String str = "boss,jack,marry,jackson";
String [] array = str.split(",");
for(int i = 0;i < array.length;i++){
System.out.println(array[i]);
//split拆分的后面部分的空字符串是不算数的
}`
将字符串中满足正则表达式的部分替换为指定内容
- String replaceAll(String regex,String replace)**
String str = "abc123sdab4543dvafvfvf888vfv8fv8";
str = str.replaceAll("\\d+", "#num#");
System.out.println(str);
//输出结果:abc#num#sdab#num#dvafvfvf#num#vfv#num#fv#num
}