文章目录
- 1.正则表达式(Regular Expression--regex)
- 1.1.正则表达式引入
- 1.2.什么是正则表达式
- 1.3.正则表达式规范
- 1.4.正则表达式用法
- 2.正则表达式案例
- 2.1.案例1:验证手机号是否合法
- 2.2 案例2:验证Email号是否合法
- 2.3 案例3:验证身份证号是否合法
- 2.4 正则表达式-文本替换
- 2.5 正则表达式-文本分割
- 2.6 正则表达式-文本抽取
- 3.常用的正则表达式(参考)
1.正则表达式(Regular Expression–regex)
1.1.正则表达式引入
- 案例:用最简单的方式判断一个字符串是否全部由数字组成?
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一串字符串:");
String line = input.next(); // 34534543sdfds4534
char[] chars = line.toCharArray(); // 转化为char数组
boolean flag = true;
for (int i = 0; i < chars.length; i++) {
if (!(chars[i] >= '0' && chars[i] <= '9')) {
flag = false; // 表示里面有非数字
break;
}
}
if (flag == true) {
System.out.println("这个字符串是纯数字组成!");
} else {
System.out.println("这个字符串不是纯数字组成!");
}
}
正则表达式版本:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一串字符串:");
String line = input.next(); // 34534543sdfds4534
String regex="\\d+"; // 正则表达式其实也是字符串,表示字符串的字符串
boolean b = line.matches(regex);
if(b==true){
System.out.println("这个字符串是纯数字组成!");
}else{
System.out.println("这个字符串不是纯数字组成!");
}
}
1.2.什么是正则表达式
- 在程序开发中,字符串处理非常频繁,那么就可以使用使用正则表达式这个工具对字符串进行相关的操作。
- 正则表达式可以对字符串进行格式匹配、提取、分割、替换等操作。
- 正则表达式本身也是一个字符串,只不过这个字符串有特殊的含义,作用是规范其他的的字符串,表示的是字符串的格式的字符串。
- 正则表达式是一个字符串模板,可以表示一批字符串,所以创建正则表达式就是创建一个特殊的字符串。
- 正则表达式最常用的场合就是在网页中进行网页表单的数据验证!!!
- Web开发中表单验证中大量使用正则表达式验证!
1.3.正则表达式规范
- 预定义字符类
- 示例
public class Demo1 {
public static void main(String[] args) {
System.out.println("a".matches("."));
System.out.println("1".matches("\\d"));
System.out.println("%".matches("\\D"));
System.out.println("\f".matches("\\s"));
System.out.println("^".matches("\\S"));
System.out.println("a".matches("\\w"));
}
}
- Greedy数量词
public class Demo2 {
public static void main(String[] args) {
System.out.println("a".matches("."));
System.out.println("a".matches("a"));
System.out.println("a".matches("a?"));
System.out.println("aaa".matches("a*"));
System.out.println("".matches("a+"));
System.out.println("aaaaa".matches("a{5}"));
System.out.println("aaaaaaaa".matches("a{5,8}"));
System.out.println("aaa".matches("a{5,}"));
System.out.println("aaaaab".matches("a{5,}"));
}
}
- 范围表示
public class Demo3 {
public static void main(String[] args) {
System.out.println( "a".matches("[a]") );
System.out.println( "aa".matches("[a]+") );
System.out.println( "abc".matches("[abc]{3,}") );
System.out.println( "abc".matches("[abc]+") );
System.out.println( "dshfshfu1".matches("[^abc]+") );
System.out.println( "abcdsaA".matches("[a-z]{5,}") );
System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") );
System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") );
System.out.println( "abdxyz".matches("[a-c[x-z]]+"));
System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}"));
System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}"));
}
}
1.4.正则表达式用法
- 方式一:
/*
* 验证密码是否合法
* 1.密码必须是字母数字或者下滑线组成
* 2.密码长度在6-8位
* 3.密码第一位必须是字母
*/
public class Demo1 {
public static void main(String[] args) {
String regex="[a-zA-Z]\\w{5,7}";
Scanner input=new Scanner(System.in);
System.out.print("请输入密码:");
String pwd=input.next();
//编译成一个Pattern对象
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(pwd);
boolean b = m.matches();
if(b==true){
System.out.println("密码输入合法!");
}else{
System.out.println("密码输入不合法!");
}
}
}
- 方式二:
/*
* 验证密码是否合法
* 1.密码必须是字母数字或者下滑线组成
* 2.密码长度在6-8位
* 3.密码第一位必须是字母
*/
public class Demo1 {
public static void main(String[] args) {
String regex="[a-zA-Z]\\w{5,7}";
Scanner input=new Scanner(System.in);
System.out.print("请输入密码:");
String pwd=input.next();
boolean b = Pattern.matches(regex, pwd);
if(b==true){
System.out.println("密码输入合法!");
}else{
System.out.println("密码输入不合法!");
}
}
}
- 方式三:
/*
* 验证密码是否合法
* 1.密码必须是字母数字或者下滑线组成
* 2.密码长度在6-8位
* 3.密码第一位必须是字母
*/
public class Demo1 {
public static void main(String[] args) {
String regex="[a-zA-Z]\\w{5,7}";
Scanner input=new Scanner(System.in);
System.out.print("请输入密码:");
String pwd=input.next();
//检测密码是否符合正则表达式的含义
boolean b = pwd.matches(regex);
if(b==true){
System.out.println("密码输入合法!");
}else{
System.out.println("密码输入不合法!");
}
}
}
2.正则表达式案例
2.1.案例1:验证手机号是否合法
/*
* 判断手机号是否合法
*/
public class Demo2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入手机号:");
String phone = input.next();
// 手机号的正则表达式
String regex = "(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]|17[0|1|2|3|5|6|7|8|9])\\d{8}";
boolean b = phone.matches(regex);
if(b==true){
System.out.println("手机号合法!");
}else{
System.out.println("手机号不合法!");
}
}
}
2.2 案例2:验证Email号是否合法
/*
* 验证Email号是否合法
*/
public class Demo3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入邮箱:");
String email = input.next();
String regex="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
boolean b = email.matches(regex);
if(b==true){
System.out.println("邮箱号合法!");
}else{
System.out.println("邮箱号不合法!");
}
}
}
2.3 案例3:验证身份证号是否合法
/*
* 验证身份证号是否合法
*/
public class Demo4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入身份证号码:");
String id = input.next();
String regex="[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)";
boolean b=id.matches(regex);
if(b==true){
System.out.println("身份证号码合法");
}else{
System.out.println("身份证号码不合法!");
}
}
}
2.4 正则表达式-文本替换
- 案例1:
/*
* 文本替换
*/
public class Demo1 {
public static void main(String[] args) {
//把这个字符串中的数字全部替换成@
String s = "sdfklsj0lkjsdkj324kjs3kdjfsd4";
String regex="\\d";
s = s.replaceAll(regex, "@"); //数字的位置替换成@
System.out.println(s);
}
}
- 案例2:
public static void main(String[] args) {
//把这个字符串中的中文替换成#
String s="你好,Hello.呵呵.How are you!!";
String regex="[\\u4e00-\\u9fa5]"; //表示一个中文字
s = s.replaceAll(regex, "#");
System.out.println(s);
}
2.5 正则表达式-文本分割
/*
* 文本分割
*/
public static void main(String[] args) {
String s = "efsds34dsafl45ds34kajf34lja";
String[] strs = s.split("\\d+");
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
}
2.6 正则表达式-文本抽取
public static void main(String[] args) {
//把字符串中的中文提取出来
Scanner input=new Scanner(System.in);
System.out.print("输入一句话:");
String word=input.next(); // Hello,大爷哈喽。hehe....你好!
String regex="[\\u4e00-\\u9fa5]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(word);
while(m.find()){
String s = m.group();
System.out.println(s);
}
}
3.常用的正则表达式(参考)
/**
* @Description
*/
public class Demo4 {
// email 正确的书写格式为 username@domain
static String _email = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+ ([-.]\\w+)*";
// 电话 正确格式 012-87654321、0123-87654321、0123-7654321
static String _tel = "\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";
// 手机号码 13187654321 13587654321
static String _phone = "^[1][3,5]+\\d{9}";
// 汉字 中国
static String _chinse = "^[\u4e00-\u9fa5]+$";
// IP 192.168.1.1
static String _ip = "\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";
// QQ 456789
static String _qq = "[1-9][0-9]{4,13}";
// 邮编 210000
static String _mail = "[1-9]\\d{5}(?!\\d)";
// 身份证号码 15或者18位
static String _id = "\\d{15}|\\d{18}";
}