• Java正则表达式


    一、 为啥要用正则表达式

    正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串校验、拆分、替换功能。

    假设: 现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:

    · 不使用正则完成

    · 使用正则表达式

    1.1 不使用正则表达式完成数字验证

    public static void main(String[] args) {
    		String regexStr = "123456789";
    		boolean flag = true;
    
    		char[] c = regexStr.toCharArray();
    		for (int i = 0; i < c.length; i++) {
    			if (c[i] < '0' || c[i] > 9) {
    				flag = false;
    				break;
    			}
    		}
    		if (flag) {
    			System.out.println("是数字组成");
    		} else {
    			System.out.println("不是数字组成");
    		}
    }

    上述程序: 先将字符串拆分,然后一个个进行比较、验证, 但是非常麻烦, 而且现在只是验证是否有数字组成,对于更加复杂的数据,验证会更加复杂。

    1.2 使用正则验证

    public static void main(String[] args) {
    		String regexStr = "123456789";
    		if (Pattern.compile("[0-9]+").matcher(regexStr).matches()) {
    			System.out.println("是数字组成");
    		} else {
    			System.out.println("不是数字组成");
    		}
    }
    以上的正则验证方式也可以很好的校验数据,且更加方便。


    二、使用java的正则表达式

    2.1 常用的正则规范


    · d : 表示数字,[0-9]

    · D: 表示非数字,[^0-9]

    · w : 表示字母、数字、下划线,[a-zA-Z0-9]

    · W : [^a-zA-Z0-9]



    2.2 Java提供的支持正则的API

    · Pattern主要是表示一个规则的意思,即: 正则表达式的规则需要在Pattern类中使用。

    · Matcher类主要用于使用Pattern制定好的验证规则。




    2.3 正则实例;

    2.3.1 验证一个字符串是否是合法的日期格式

    public static void main(String args[]){
    		String str = "1983-07-27" ;		// 指定好一个日期格式的字符串
    		String pat = "\d{4}-\d{2}-\d{2}" ;	// 指定好正则表达式
    		Pattern p = Pattern.compile(pat) ;	// 实例化Pattern类
    		Matcher m = p.matcher(str) ;	// 实例化Matcher类
    		if(m.matches()){		// 进行验证的匹配,使用正则
    			System.out.println("日期格式合法!") ;
    		}else{
    			System.out.println("日期格式不合法!") ;
    		}
    }

    2.3.2 字符串拆分

    public static void main(String args[]){
    		// 要求将里面的字符取出,也就是说按照数字拆分
    		String str = "A1B22C333D4444E55555F" ;	// 指定好一个字符串
    		String pat = "\d+" ;	// 指定好正则表达式
    		Pattern p = Pattern.compile(pat) ;	// 实例化Pattern类
    		String s[] = p.split(str) ;	// 执行拆分操作
    		for(int x=0;x<s.length;x++){
    			System.out.print(s[x] + "	") ;
    		}
    }

    2.3.3 字符串替换: 将字符串中全部数字替换成“_”

    public static void main(String args[]){
    		// 要求将里面的字符取出,也就是说按照数字拆分
    		String str = "A1B22C333D4444E55555F" ;	// 指定好一个字符串
    		String pat = "\d+" ;	// 指定好正则表达式
    		Pattern p = Pattern.compile(pat) ;	// 实例化Pattern类
    		Matcher m = p.matcher(str) ;	// 实例化Matcher类的对象
    		String newString = m.replaceAll("_") ;
    		System.out.println(newString) ;
    }

    三、String类对正则的支持

    String类本身提供了对正则的支持:


    3.1 简单的String正则

    public static void main(String args[]){
    		String str1 = "A1B22C333D4444E55555F".replaceAll("\d+","_") ;
    		boolean temp = "1983-07-27".matches("\d{4}-\d{2}-\d{2}") ;
    		String s[] = "A1B22C333D4444E55555F".split("\d+") ;
    		System.out.println("字符串替换操作:" + str1) ;
    		System.out.println("字符串验证:" + temp) ;
    		System.out.print("字符串的拆分:") ;
    		for(int x=0;x<s.length;x++){
    			System.out.print(s[x] + "	") ;
    		}
    }

    3.2 复杂的数据拆分

    public static void main(String args[]){
    		String info = "LXH:98|MLDN:90|LI:100" ;			// 定义一个字符串
    		// 拆分的形式:
    		/*
    			LXH	-->	98
    			MLDN	-->	90
    			LI	-->	100
    		*/
    		String s[] = info.split("\|") ;
    		System.out.println("字符串的拆分:") ;
    		for(int x=0;x<s.length;x++){
    			String s2[] = s[x].split(":") ;
    			System.out.println(s2[0] + "	" + s2[1]) ;
    		}
    }


    总结:

    1. 使用正则可以方便完成字符串的验证、拆分、替换

    2. 在开发中可以使用Stirng类提供好的正则支持。

    3. 在进行正则验证时,对于一些敏感的字符要进行转义操作。






  • 相关阅读:
    闲谈:价值、服务、时间、用户体验、美、过度开发
    笔记:Sublime Text 3
    快速切换目录命令go
    miniPy for CentOS 5/6
    用Fabric实现小批量的自动化上线
    异步多线程C/S框架gko_pool
    Reboot分享第三期(已结束)
    Reboot分享第二期(已结束)
    Reboot分享第一期(已结束)
    iptables从入门到精通
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330019.html
Copyright © 2020-2023  润新知