编程或者电脑使用过程中,经常需要对字符串进行 匹配,查找,替换,判断。如果单纯用代码 if () ,whlie 什么的进行比较复杂麻烦。正则表达式是一种强大灵活的文本处理工具,专门对字符串进行匹配,查找,替换,判断。
正则表达式的各种匹配符
- // 正则表达式的各种匹配符
- ^ 从行的开始位置开始匹配
- $ 匹配到行的结束位置
- \b 匹配单词的开始或结束位置
- . 匹配除换行符的所有任意字符
- \w 匹配单字(a-z,A-Z,0-9,下划线)
- \W 匹配非单字字符
- \s 匹配空白字符
- \S 匹配非空白字符
- \d 匹配数字字符(0-9)
- \D 匹配非数字字符
- * 匹配前面表达式零次或多次,等价于 {0,}
- + 匹配前面表达式一次或多次,等价于 {1,}
- ? 匹配前面表达式零次或一次,等价于{0,1}
- {n} 匹配前面的表达式n次,n是一个非负整数
- {n,} 匹配前面的表达式至少n次,n是一个非负整数
- {n,m} 匹配前面的表达式 n-m 次, nm都是非负整数
- [] 字符类,如[123]表示有123中任意一个数字,[1-9]表示1到9中任意一个数字
- () 分组,匹配括号里的整体,(java)+ 就是匹配一个"java"至少出现一次的字符串
- ^ 反义匹配,用在判断条件前。 例如 .*[^\d]\.java$ 就是匹配最后一位非数字的java文件
- | 逻辑或
- \ 转义字符,和编程语言里的一样
了解了这些匹配符,就可以开始写匹配式,很多网站提交信息的时候说填写的什么信息不规范就是正则匹配式进行判断。
手机号码验证:国内手机都是13,15,18开头的11位数字,据此来进行匹配验证
匹配式: \b1[358]\d{9}\b 开头与结尾写\b,号码开始是1,第二位是3、5、8中的一个数字,剩下九位是数字
- boolean check = false;
- String regex = "\b1[358]\d{9}\b";
- String input = "19100390888";
- Pattern pattern = Pattern.compile(regex) //编译正则表达式
- Matcher matcher = pattern.matcher(input) //进行匹配
- if (matcher.matches()) check = true;
- return check;
身份证验证:前六位地区码(数字),中间八位生日(数字),末尾四位标识码(数字)。生日年开头是19或者2,月01-12,日01-31。
匹配式: ^\d{6}((19)|(2\d)\d{2}((0\d)|(1[012]))(([0-2]\d)|(3[01]))\d{4})$
- boolean check = false;
- String regex = "^\d{6}((19)|(2\d)\d{2}((0\d)|(1[012]))(([0-2]\d)|(3[01]))\d{4})$";
- String input = "19100390888";
- Pattern pattern = Pattern.compile(regex) //编译正则表达式
- Matcher matcher = pattern.matcher(input) //进行匹配
- if (matcher.matches()) check = true;
- return check;
邮箱验证:前面任意位数非空字符,必须带@,末尾必须有.com或者.cn
匹配式: \w+@\w+\.(com)|(cn)
- boolean check = false;
- String regex = "\w+@\w+\.(com)|(cn)";
- String input = "19100390888";
- Pattern pattern = Pattern.compile(regex) //编译正则表达式
- Matcher matcher = pattern.matcher(input) //进行匹配
- if (matcher.matches()) check = true;
- return check;