快速过了一遍正则表达式必知必会,初步总结,不全,仅供参考,错误的地方还望大家不吝指正
学习的时候可以用正则表达式式在线测试工具: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"\?"表示匹配?