如何掌握正则表达式这一开发利器,看这篇就够了

作者:mathe , 腾讯QQ音乐前端开发工程师

正则表达式具有伟大技术发明的一切特点 , 它简单、优美、功能强大、妙用无穷 。对于很多实际工作来讲 , 正则表达式简直是灵丹妙药 , 能够成百倍地提高开发效率和程序质量 。
1. 正则常见规则1.1 字符匹配字符说明转义符d[0-9] 。表示是一位数字 。D[^0-9] 。表示除数字外的任意字符 。w[0-9a-zA-Z_] 。表示数字、大小写字母和下划线 。W[^0-9a-zA-Z_] 。非单词字符 。s[tvnrf] 。表示空白符 , 包括空格、水平制表符、
垂直制表符、换行符、回车符、换页符 。S[^tvnrf] 。非空白符 。.[^nr] 。通配符 , 表示几乎任意字符 。
换行符、回车符、行分隔符和段分隔符除外 。uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符 。f匹配一个换页符 (U+000C) 。n匹配一个换行符 (U+000A) 。r匹配一个回车符 (U+000D) 。t匹配一个水平制表符 (U+0009) 。v匹配一个垂直制表符 (U+000B) 。匹配 NULL(U+0000)字符 ,  不要在这后面跟其它小数 , 因为 是一个
八进制转义序列 。[b]匹配一个退格(U+0008) 。(不要和b 混淆了 。)[abc]any of a, b, or c[^abc]not a, b, or c[a-g]character between a & g
1.2 位置匹配字符说明b是单词边界 , 具体就是w 和W 之间的位置 , 也包括w 和 ^ 之间的位置 , 
也包括w 和之间的位置 。具体说来就是与、与、与 , 与之间的位置 。B是b 的反面的意思 , 非单词边界 。例如在字符串中所有位置中 , 扣掉b , 
剩下的都是B 的 。^abc$字符串开始、结束的位置
1.3 组字符说明(abc)capture group , 捕获组nbackreference to group #n , 分组引用 , 引用第 n 个捕获组匹配的内容,
其中 n 是正整数(?:abc)non-capturing group , 非捕获组
1.4 先行断言字符说明a(?=b)positive lookahead , 先行断言 , a 只有在 b 前面才匹配a(?!b)negative lookahead , 先行否定断言 , a 只有不在 b 前面才匹配
1.5 后行断言字符说明(?<=b)apositive lookbehind , 后行断言 , a 只有在 b 后面才匹配(?<!b)anegative lookbehind , 后行否定断言 , a 只有不在 b 后面才匹配
1.6 量词和分支【如何掌握正则表达式这一开发利器,看这篇就够了】字符说明a*0 or morea+1 or morea?0 or 1a{5}exactly fivea{2,}two or morea{1,3}between one & threea+?
a{2,}?match as few as possible , 惰性匹配 , 就是尽可能少的匹配
以下都是惰性匹配:
{m,n}?
{m,}?
??
+?
*?
1.7 分支字符说明ab|cdmatch ab or cd , 匹配'ab'或者'cd'字符子串
1.8 修饰符字符说明i执行对大小写不敏感的匹配 。g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) 。m执行多行匹配 。u开启"Unicode 模式" , 用来正确处理大于uFFFF 的 Unicode 字符 。也就是说 , 会正确处理四个字节的 UTF-16 编码 。s允许 . 匹配换行符 。yy 修饰符的作用与 g 修饰符类似 , 也是全局匹配 , 后一次匹配都从上一次匹配成功的下一个位置开始 。不同之处在于 , g 修饰符只要剩余位置中存在匹配就可 , 而 y 修饰符确保匹配必须从剩余的第一个位置开始 , 这也就是"粘连"的涵义
2. 运算符优先级运算符描述转义符(), (?:), (?=), []圆括号和方括号*, +, ?, {n}, {n,}, {n,m}限定符^, $, 任何元字符、任何字符定位点和序列(即:位置和顺序)|替换 , "或"操作
字符具有高于替换运算符的优先级 , 使得"m|food"匹配"m"或"food" 。若要匹配"mood"或"food" , 请使用括号创建子表达式 , 从而产生"(m|f)ood" 。
3. 正则回溯3.1 什么是回溯算法以下是来自摘自维基百科的部分解释:
回溯法是一种通用的计算机算法 , 用于查找某些计算问题的所有(或某些)解决方案 , 特别是约束满足问题 , 逐步构建候选解决方案 , 并在确定候选不可能时立即放弃候选("回溯")完成有效的解决方案 。
回溯法通常用最简单的递归方法来实现 , 在反复重复上述的步骤后可能出现两种情况:
找到一个可能存在的正确的答案


推荐阅读