正则学习

\b : 代表的单词的开头或结尾
example : \bhi\b.*\bLucy\b
. : 代表是的除了换行以外的任意字符
* : 其前面的内容可以出现任意次
.* : 不包括换行符的任意字符出现的数量
\d : 代表1位数字
{2} : 指定前面的表达式必须实现2次
\s : 代表任意的空白符、制表符、换行符
\w : 代表字母或数字
example : \ba\w*\b : 以字母a开头的单词-先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)
: \b\w{6}\b : 刚好6个字母/数字的单词

`: 匹配你要查找的字符串的开头
$ : 匹配结尾
`\d{5,12}$ : 必须是5-12位数字的组成的字符串; 比如QQ号
? : 重复0次或1次
[aeiou] : 匹配(a e i o u) 任何一个元音字母
[a-z0-9A-Z] 等同于\w : 表示任意数字或字母

\(?0\d{2}[) -]?\d{8} ( ‘(’可以出现一次或0次、之后紧接着0、出现2个数字、 ')-' 任意一个 ) 这些数据出现0次或者1次 接下来是8位数字

大写字母的意义(取反):
\W : 匹配任意不是字母和数字的字符
\S : 匹配任意不是空白的字符
\D : 匹配任意非数字的字符
\B : 匹配不是单词开头过结束的位置
[`x] : 匹配除了x以外的任意字符
[`aeiou] : 匹配粗了aeiou这几个字符以外的任意字符

example: <a[^>]+> : 用尖括号括起来的一a开头的字符
000-898888888

| : 代表或者额关系

分组: 用小括号来制定一个子表达式

\b(\w+)\b\s+\1\b : 首先是一个单词,单词的开始和结束之间多于一个的字母或数字(\b(\w)\b) , 然后是一个或多个空格\s+ ; 最后是前面匹配的那个单词(\1)

使用制定的组号或组名: (?<Word>\w+)
如果要反向引用这个分组: \k<Word>

之前的例子可以改写为:
\b(?<test>\w+) \b\s+\k<test>\b


常见的分组:
捕获: (exp) 匹配exp, 并捕获文本到自动命名的组里
(?<Word>exp)匹配exp, 并捕获文本到名称为word的组
(?:exp) 匹配exp, 不捕获匹配的文本, 也不给此分组

零宽断言: (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响


零宽度正预测先行断言(?=exp) : 断言自身出现的位置的后面能匹配表达式exp
example : \b\w+(?=ing\b): 匹配ing结尾单词的前面部分
零宽度正回顾后发断言(?<=exp) : 断言自身出现的位置的前面能匹配表达式 exp
example : (?<=\bre)\w+\b : 匹配以re开头的单词的后半部分


懒惰限定符:
*? : 重复任意次, 但尽可能的少重复
+? : 重复1次或多次, 但尽可能少重复
?? : 重复0次或1次, 但尽可能少重复
{n,m}? : 重复n到m次, 但尽可能少重复
{n,}? : 重复n次以上, 但尽可能少重复

因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:

The match that begins earlist wins。: 最先开始的匹配拥有最高的优先权

posted on 2016-06-13 15:31  IsRunning  阅读(160)  评论(0编辑  收藏  举报