元字符字符转义后向引用零宽断言贪婪与懒惰尚未详细讨论的语法模块中的核心函数总结超好用的测试正则的软件
元字符b:代表单词的开头或结尾,为单词的交界处;虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。.:匹配除了换行符以外的任意字符。*:代表的是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配,匹配重复任意次(可能是0次)。.*:任意数量的不包含换行的字符。+:同*,但匹配重复1次或更多次。-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。 字符转义
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用来取消这些字符的特殊意义。因此,你应该使用.和*。当然,要查找本身,你也得用\.
后向引用后向引用用于重复搜索前面某个分组匹配的文本。如匹配go go或自己指定子表达式的组名
零宽断言
零宽度正预测先行断言:(?=exp),它断言自身出现的位置的后面能匹配表达式exp。
例:bw+(?=ingb),匹配以ing结尾的单词的前面部分(除了ing以外的部分);搜索I'm singing while you're dancing.,匹配sing和danc。
零宽度正回顾后发断言:(?<=exp),它断言自身出现的位置的前面能匹配表达式exp。
例:(?<=bre)w+b,匹配以re开头的单词的后半部分(除了re以外的部分);搜索reading a book,匹配ading。
例:((?<=d)d{3})+b,要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),查找需要在前面和里面添加逗号的部分;搜索1234567890,匹配234567890。
例:(?<=s)d+(?=s),匹配以空白符间隔的数字(再次强调,不包括这些空白符)。
负向零宽断言:只是想要确保某个字符没有出现,但并不想去匹配它。
例:bw*q[^u]w*b,匹配里面出现了字母q,但是q后面跟的不是字母u的单词;搜索Iraq,Benq,匹配Iraq。
零宽度负预测先行断言:(?!exp),断言此位置的后面不能匹配表达式exp。
例:d{3}(?!d),匹配三位数字,而且这三位数字的后面不能是数字。
例:b((?!abc)w)+b,匹配不包含连续字符串abc的单词。
零宽度负回顾后发断言:(? 例:(?
例:(?<=<(w+)>).*(?=1>),匹配不包含属性的简单HTML标签内里的内容。
(?<= # 断言要匹配的文本的前缀
<(w+)> # 查找尖括号括起来的内容
# (即HTML/XML标签)
) # 前缀结束
.* # 匹配任意文本
(?= # 断言要匹配的文本的后缀
1> # 查找尖括号括起来的内容
# 查找尖括号括起来的内容
) # 后缀结束
贪婪与懒惰
规则:最先开始的匹配拥有最高的优先权。贪婪匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
例:a.*b,匹配最长的以a开始,以b结束的字符串;搜索aabab,匹配整个字符串aabab。懒惰匹配:匹配尽可能少的字符。例:a.*?b,匹配最短的,以a开始,以b结束的字符串;搜索aabab,匹配aab。
| 查找项 | 正则表达式 |
|---|---|
| hi | bhib |
| hi后面不远处跟着一个Lucy | bhib.*bLucyb |
| 匹配1个或更多连续的数字 | d+ |
| 填写的QQ号必须为5位到12位数字 | ^d{5,12}$ |
| 匹配3位区号的电话号码 | (0d{2}d)[- ]?d{8}|0d{2}[- ]?d{8} |
| 描述一个正确的IP地址 | ((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?) |
| kitty kitty或者go go | b(w+)bs+1b |
| 自己指定子表达式的组名 | b(? |
| 代码/语法 | 说明 |
|---|---|
| a | 报警字符(打印它的效果是电脑嘀一声) |
| b | 通常是单词分界位置,但如果在字符类里使用代表退格 |
| t | 制表符,Tab |
| r | 回车 |
| v | 竖向制表符 |
| f | 换页符 |
| n | 换行符 |
| e | Escape |


