正则表达式必知必会总结

快速过了一遍正则表达式必知必会,初步总结,不全,仅供参考,错误的地方还望大家不吝指正

学习的时候可以用正则表达式式在线测试工具:http://tool.oschina.net/regex/

建议大家有时间还是阅读《正则表达式必知必会》总结已经非常精炼了,大概2小时左右就可以过一遍

一. 字符匹配

1. 匹配数字  \d ; 匹配非数字 \D

2. 匹配空白字符 \s ;匹配非空白字符 \S

3. 匹配单个字符 . (除换行符以外的所有字符)  

4. 匹配字符 \w  (字母、数字和下划线)

二. 匹配字符组中的一个

1. 集合 [abcd]

2. 区间 [1-9]

3.区间和集合可以混用 [1-9abd-h]

4.字符组取非 [^1-9ab] 表示匹配除了字符组中的字符以外的字符

三. 重复匹配

1. 匹配一个或多个 +

2. 匹配零个或一个 ?

3. 匹配零个或多个 *

4. 匹配n次 {n}

5. 匹配n至m次 {n,m}

6. 匹配最少n次{n,}

四. 贪婪匹配与惰性匹配

1. 重复匹配算法为贪婪匹配,比如 "12345645" 

                                                    re"1\d*5"

                                                     贪婪匹配会在字符串中找到最长的满足正则的子串,12345645 

2. 重复匹配有惰性版本,主要有以下三种情况

贪婪元字符 惰性版本
* *?
+ +?
{n,} {n,}?
{n,m} {n,m}?

五. 单词边界 \b; 非单词边界\B

比如 abc ab  dab dabc

       re"ab"   : 四个ab将会全部被匹配到

加上单词边界 re "\bab"  :表示只取作为单词开头的ab  也就只有前面两个ab会被匹配到

                    re "ab\b"  :表示只取作为单词结尾的ab  也就是只有第2,3两个ab会被匹配到

                    re"\bab\b" :相当于 re"ab" 即作为单词头又作为单词尾


六. 字符串边界^

字符串开头:^

字符串结尾 :$

    用法和意义与单词边界相同,只是一个是单词,一个是字符串

七. 子表达式和回溯引用

比如,正则re"\d{1,3}\.\d{1.3}\.\d{1,3}"

           其中\d{1,3}出现了三次,你写的累不累,累就想办法偷个懒

          改成re"(\d{1,3})\.\1\.\1"

           其中小括号部分就是子表达式,\1表示该正则中出现的第一个子表达式

八. 前后查找

1. 向前查找  ?=:可以理解为到此为止

     比如 re"\d+(?=dollar)" 匹配金额,但不会消费金额后面的单位dollar(即匹配结果只有金额数没有dollar)

2. 向后查找 ?<=:可以理解为自此开始

    比如 re"(?<=\$)\d+"匹配今个,但不会消费前面的金钱符$

九. 嵌入条件

(?(n)expression1|expression2)

表示:如果第n个子表达式匹配到则匹配expression1 否则 匹配expression2

比如  电话号码只接受123-456-7890及 (123)456-7890两种格式

        re"(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}" 其中(?(1)\)|-)表示如果第一个子表达式匹配到(即开头有左括号),则在此处匹配有括号,否则匹配-

十. 元字符

1. 什么是元字符:

    在正则表达式中,有些字符有特殊的含义,比如? * ( ) [ ] . ^ $ \(金钱符还可以用于回溯替换,下次补充),这些字符被称为元字符

2. 怎么匹配元字符:

    利用转义字符\ ,比如re"\?"表示匹配? 

猜你喜欢

转载自blog.csdn.net/spy_h/article/details/80632666