正则表达式笔记
说明:绿色:强调 红色:匹配结果
1.贪婪与懒惰
贪婪: a.*b aabab
懒惰: a.*?b aabab
2.重复
* : 0到多
+ : 1到多
? : 0到1
{n,m} : n到m
{n,} : n到多
{n} : n
3. [] : 单个匹配
4.转义(查找元字符)
5.分支(从左至右,懒惰)
| 0d{2}-d{8}|0d{3}-d{7} 012-1234567899990123-1234567
6.分组 与 向后引用
后向引用用于重复搜索前面某个分组匹配的文本 从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推
(?<Word>w+)s+k<Word> kitty kitty
表4.常用分组语法 |
||
分类 |
代码/语法 |
说明 |
捕获 |
(exp) |
匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
|
(?:exp) |
匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
|
零宽断言 |
(?=exp) |
匹配exp前面的位置 |
(?<=exp) |
匹配exp后面的位置 |
|
(?!exp) |
匹配后面跟的不是exp的位置 |
|
(?<!exp) |
匹配前面不是exp的位置 |
|
注释 |
(?#comment) |
这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
零宽断言(断言不算分组)
(?=exp) w+(?=ing) I'm singing while you're dancing.
(?<=exp) (?<=re)w+ reading a book
负向零宽断言
(?!exp) ((?!abc)w)+ 匹配不包含连续字符串abc的单词
(?!exp)
(?<=<(w+)>).*(?=</1>) <b>大大</b>
3. 元字符(特殊意义)
: 分界,限定位置 hi hihi hi hissa
d : 一位数字 d 1231215
w: 一位数字或英文字母
^ : 开始位置
$ : 结束位置
*
+
?
(
)
7.反义字符
W 匹配一个不是字母,数字,下划线,汉字的字符
S 匹配一个不是空白符的字符
D 匹配一个非数字的字符
B 匹配一个单词开头或结束的位置
8.注释
(?#comment)来包含注释。例如:2[0-4]d(?#200-249)|25[0-5](?#250-255)|[01]?dd?(?#0-199)。
要包含注释的话,最好是启用“忽略模式里的空白符”选项,空白字符以及#后面到这一行结束的所有文本都将被当成注释忽略掉。例如,我们可以前面的一个表达式写成这样:
(?<= # 断言要匹配的文本的前缀 <(w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签) ) # 前缀结束 .* # 匹配任意文本 (?= # 断言要匹配的文本的后缀 </1> # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签 ) # 后缀结束
参考:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html