学习正则表达式首先要明白什么是转义字符,转义字符从字面意思理解就是改变字符的意义,为什么需要这样做呢?首先我们来看一下java中
一些基本的转义字符:
\n 回车 \u000a
\t 制表符 \u0009
\b 空格 \u0008
........
\n表示空格,也就是这个字符“\n”如果存在于一个字符串中,如:"sdfsd\ndsdf",将这段字符打印出来他输出的不是"sdfsd\ndsdf",而是先输出sdfsd
然后再换行输出dsdf,如果需要将这段字符"sdfsd\ndsdf"完整的输出来,那么就需要对\n进行转义,也就是说\n这个字符串他所表达的意思不是他这
个字符串的本身,他表示的是换行,如果需要得到这个字符串的本身就需要改变他所表达的意思也就是转义。
下面我们来看一下一些简单正则表达式:
public static void main(String[] args) {
Regular regular = new Regular();
regular.test();
String str = "sdfsd\ndsdf";
System.out.println(str);
}
public void test(){
/**
* 匹配字符串*/
Pattern pattern = Pattern.compile("a*b");//正则表达式
Matcher mat = pattern.matcher("b");//匹配的字符串
boolean b = mat.matches();//返回匹配后的结果
System.out.println(b);
Pattern pattern2 = Pattern.compile("a*b");
Matcher mat2 = pattern2.matcher("adfsdadfeb");
boolean b2 = mat2.find();
System.out.println(b2);
Pattern pattern3 = Pattern.compile("a*b");
Matcher mat3 = pattern3.matcher("absdfebsdfadadab");
boolean b3 = mat3.lookingAt();
System.out.println(b3);
/**
* 分割字符串*/
Pattern pattern4 = Pattern.compile("\\{");
String str[] = pattern4.split("a{d{b{d");
if(str!=null){
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
/**
* 字符串替换*/
Pattern pattern5 = Pattern.compile("\\(dog\\)");
Matcher mat5 = pattern5.matcher("zzz(dog)zzz(dog)zzz");
String replace = mat5.replaceFirst("cat");
System.out.println(replace);
}
身份证号码验证
public void test1(){
boolean b = false;
//正则表达式表示15位或者18位数字的一串数字
Pattern p = Pattern.compile("\\d{15}|\\d{18}");
Matcher m = p.matcher("120101198506020080");
b = m.matches();
System.out.println("身份证号码正确:"+b); //输出:true
//
p = Pattern.compile("\\d{15}|\\d{18}");
m = p.matcher("020101198506020080");//错误 首位为0
b = m.matches();
System.out.println("身份证号码错误:"+b); //输出:false
}