1.正则表达式

    正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求。

    1)"."和"\"

        "."点儿,在正则表达式中表示任意一个字符。 

      "\"在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用"\"将其转变为原本的意思。 

        "\"在正则表达式中也有一些预定义的特殊内容: 

        \d:表示任意一个数字 

        \w:表示任意一个单词字符(只能是 数字,字母,下划线)

        \s:表示任意一个空白字符(\t \r \n \f \x0B)

        \D:表示任意一个非数字字符

        \W:表示任意一个非单词字符

        \S:表示任意一个非空白字符

    2)"字符集合 [ ]" 

        "[ ]"用来描述单一字符,方括号内部可以定义这个字符的内容,也可以描述一个范围。例如: 

        [abc]:表示该字符只能是a或者b或者c 

        [123]:表示该字符只能是1或者2或者3 

        当我们需要描述所有小写字母时,我们可以使用范围 [a-z],表示该字符可以是任意一个小写字母。 

        同样还可以使用 [0-9] 来表示该字符可以是任意一个数字。 

        也可以在多个范围内选择。比如,[a-zA-Z0-9_] 表示该字符可以是任意字母,数字以及"下划线"。 

    3)"*"、"+"、"?" 

        通常我们需要描述的字符串会有很多重复出现的元素,但又不需要严格限制出现的次数时,我们就可以使用"*","+"这些量词。 

        例如:邮箱地址,那么在"@"字符前允许出现若干字符作为用户名。这时候我们就可以使用"\w+"来描述这里至少出现一个单词字符了。 

        "+":表示内容可以连续出现至少1次以上 

        "*":表示内容出现0-若干次

        "?":表示内容出现0-1次

    4){n}、{n,}{n,m} 

        除了前面讲到的量词外,有时我们也需要要求内容出现的次数有具体要求。比如手机号码。这时我们要求出现的数字就不能是一个模糊的概念了,而必须要求11位。又比如我们要求用户输入密码时,要求密码是6-15位。遇到这类问题是,我们可以使用: 

        {n}:表示内容必须出现n次 

        {n,m}:表示内容出现n-m次

        {n,}:表示内容出现至少n次

        例如,\d{11} 就表示数字只能出现11位,这样就解决了上述的问题。

    5)分组

        在描述电话号码时,前面有区号,区号的形式可以是0086或者+86,那么我们如何在这两个字符串之间选择?这时我们可以使用分组"()"。

        () 可以将内容看做一个整体,()中可以使用"|"来表示或关系。例如,(+86|0086) 表示这里可以是+86或者0086。

    6)"^"和"$"

        通过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个整体。若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。

例如,^\w{ 8,10 }$ 表示整体字符串只能出现单词字符8-10个。

    7)使用正则表达式需要注意:

        ① 邮箱格式的正则表达式 @无特殊含义,可直接写,也可[@] 

        ② 使用Java字符串去描述正则表达式的时候,会出现一个冲突,即如何正确描述正则表达式的“.”。

        起因:

        在正则表达式中我们想描述一个“.”,但“.”在正则表达式中有特殊含义,他代表任意字符,所以我们在正则表达式中想描述“.”的愿义就要写成“\.”但是我们用java字符串去描述正则表达式的时候,因为“.”在java字符串中没有特殊意义,所以java认为我们书写String s="\.";是有语法错误的,因为“.”不需要转义,这就产生了冲突。

            处理:我们实际的目的很简单,就是要让java的字符串描述"\."又因为在java中"\"是有特殊含义的,代表转义字符我们只需要将"\"转义为单纯的斜杠,即可描述"\."了所以我们用java描述“\.”的正确写法是String s="\\.";

        ③ 若正则表达式不书写^或$,正则表达式代表匹配部分内容,都加上则表示权匹配。 


    案例4: