第十章:正则表达式

认识正则表达式

  通过之前一系列的分析可以发现,String是一个非常万能的类型,因为String不仅仅可以支持有各种字符串的处理操作,也支持有向各个数据类型的转换功能,所以在项目的开发之中,只要是用户输入的信息基本上都用String表示。于是再向其它数据类型转换的时候,为了保证转换的正确性,往往需要对其进行一些复杂的验证处理,那么这种情况下如果只是单纯的依靠Strign类中的方法是非常麻烦的。

  现在假设有一个字符串要求判断字符串是否由数字所组成,如果由数字所组成则将其变为数字进行乘法计算

  实际上这种验证的功能是非常简单的,但是这如此简单的功能却需要开发者编写大量的程序逻辑代码,那么如果是更加复杂的验证呢?对于验证来讲最好的做法就是利用正则表达式来完成。

非常简单的完成了验证,正则表达式最早是从Perl语言里面发展而来的,而后在JDK1.4以前如果需要使用到正则表达式的相关定义,需要单独引入其它的*。jar文件,但是从JDK1.4之后,正则已经默认被JDK所支持,并且提供有java.util.regex开发包,同时针对String类进行了修改,使其可以有方法直接支持正则处理。

   使用正则最大的特点在于方便进行验证处理,以及方便进行复杂字符串的修改处理。实际上Eclipse中生成setter、getter都是通过正则匹配的,正则用的比较复杂的环境就在这种代码生成器上。我们实际用正则最多的就在数据验证处理上。

常用正则标记(背)

  如果想要进行正则的处理操作,那么就首先需要对常用的正则标记有所掌握,从JDK1.4开始提供有java.util.regex开发包,这个包提供有一个Patter程序类,在这个程序类里面定义有所有支持正则标记。

1、【数量:单个】字符匹配:

  任意字符:表示由任意字符组成(只能匹配一个,没有数量概念的)

     

  \\:匹配“\”;

  \n:匹配换行;

  \t:匹配制表符;

2、【数量:单个】字符集匹配(可以从里面任选一个字符):

  [abc]:表示可能是字母a、b、c中的任意一个;

    

  [^abc]:表示不是a、b、c中的任意一个;

  [a-zA-Z]:表示由一个任意字母所组成,不区分大小写;

     

  [0-9]:表示由一位数字所组成;

    

3、【数量:单个】简化字符集:

  .:表示任意的一个字符;

  \d:等价于"[0-9]"范围;

    

  \D:等价于“[^0-9]”范围;

    

  \s:匹配任意的一位空格,可能是空格、换行、制表符;

    

  \w:匹配字母、数字、下划线,等价于“[a-zA-Z_0-9]”;

  \W:匹配非字母、数字、下划线;

4、边界匹配:

  ^:匹配边界开始;

  $:匹配边界结束;

5、数量表示,默认情况下只有添加了数量单位才可以匹配多位字符;

  表达式?:该正则可以出现0次或一次

  表达式*:该正则可以出现0次、1次或多次;

  表达式+:该正则可以出现1次或多次;

  表达式{n,}:表达式的长度为n次以上(注意,号);

     

  表达式{n,m}:表达式的长度为n到m次;

6、逻辑表达式:可以连接多个正则:

  表达式X表达式Y:X表达式之后紧跟上Y表达式;

  表达式X|表达式Y:有一个表达式满足即可;

  (表达式):为表达式设置一个整体描述,可以为整体描述设置数量单位。

以上这些必须掌握熟练

String类对正则的支持

   在进行正则表达式大部分处理的情况下都会基于String类来完成,并且在String类里面提供有如下与正则有关的操作方法:

  下面通过具体的范例来对正则的使用进行说明。(现在只是做一个基础的验证,以后还有深层次,更深层次,更更生层次(正则是个语言,相当深))

替换一串字符串里面不是字母数字的内容

实现字符串的拆分

在正则处理的时候对于拆分与替换的操作相对容易一些,但是比较麻烦的是数据验证部分。

判断一个数剧是否是小数

现在判断一个字符串是否由日期所组成,如果是由日期所组成则将其转为Date类型,需要注意的是,正则表达式无法对里面的内容进行判断,只能够对格式进行判断处理。

判断给定的电话号码是否正确?

  既然以及可以使用正则进行验证了,那么下面就可以利用其来实现一个email地址格式的验证。

email的用户名可以由字母、数字、_所组成;

email的域名可以由字母、数字、_、-(中划线)所组成

域名的后缀必须是:cn、com、.net、.com.cn、.gov

 

  现在这几种正则的匹配处理操作是最常用的几种处理形式。所以要熟练编写。

java.util.regex开发包

  虽然在大部分情况下都可以利用String类实现正则的操作,但是也有一些情况下需要使用到java.util.regex开发包中提供的正则处理类,这个包里面一共定义有两个类:Patter(正则表达式编译类)、Matcher(匹配类)

  如果纯粹是以拆分、替换、匹配三种操作为例根本用不到java.util.regex开发包,只依靠String类就都可以实现了。有一些正则的操作是String不具备的

  Matcher类里面提供的有一个分组的功能,它是String不具备的。这种功能是日后进行一些实体层框架处理的时候主要采用的模式。

  java.util.regex开发包,如果不是进行一些更为复杂的正则处理是很难使用到的,而String类所提供的功能只适合于正则的基本操作,而正则的验证是基础的操作中最重要的部分。

posted @ 2019-07-26 00:14  键盘小侠  阅读(173)  评论(0编辑  收藏  举报