整理简化自 《正则表达式必知必会》前六章, Ben Forta 著。
1. RegEx的用途:
搜索, 替换
2. 匹配单个字符
2.1 匹配纯文本, 比如 /Ben/ 就匹配文本里含Ben的, 但绝大多数RegEx引擎默认只返回第一个
匹配结果。注: RegEx区分大小写。
2.2 英文句号. 用来匹配任意单个字符(包括空格,但绝大多数情况下, 不匹配换行符)。
注: 匹配的并不总是整个字符串, 而是与某个模式相匹配的字符,即使它们只是整个字符串的
一部分。
如: 文本: sales1.xls order3.xls sales2.xls
RegEx: sales.
结果:sales1.xls order3.xlssales2.xls
想要匹配 . 本身, 需用\. 来进行匹配。
3. 匹配一组字符
3.1.[ 和 ] 定义一个字符集合, 这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹
配
结果是能够和该集合里的任一个成员相匹配的文本。
如 [ns]a.\.xls 可用来匹配 na1.xls,na2.xls,sa1.xls
3.2. 字符区间用- (连字符)来定义。如[0-5]和[012345]等价, 常用的有[0-9a-zA-Z]用来匹配任
意
一
个字母(不分大小写)或数字。
3.3. ^ 用来取非匹配。除了那个字符集合里的字符, 其他字符都可以匹配。[^0-9]将匹配任意一个
不
是数字的字符。 ^将作用于给定字符集合里的所有字符或字符区间, 而不是仅限于紧跟在 ^
后面
的那一个字符或字符区间。
4. 使用元字符
4.1. 用 \ 对特殊字符进行转义,如 \[,\],\\
4.2. 空白元字符:
\b | 回退(并删除)一个字符(Backspace键) |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符(Tab键) |
\v | 垂直制表符 |
4.3. 匹配特定的字符类别
\d | 任意一个数字字符(等价于[0-9]) |
\D | 任意一个非数字字符,即[^0-9] |
\w | 任意一个字母数字字符(大小写均可)或下划线字符,即[0-9a-zA-Z_] |
\W | 任意一个非字母数字或非下划线字符, 即[^a-zA-Z0-9_] |
\s | 任意一个空白字符,即[\f\n\r\t\v] |
\S | 任意一个非空白字符,即[^\f\n\r\t\v] |
\x和\0 | 分别表示十六进制数值和八进制数值 |
5. 重复匹配
5.1+ 匹配一个或多个字符(至少一个!),在给一个字符集合加上+后缀的时候, 应放在字符集合
的外面,如 [0-9]+ +是一个元字符,要匹配本身需使用 \+
5.2 * 匹配零个或多个字符(可有可无), 意为“在我前面的字符或字符集合是可选的”。如 B.* 可匹
配 Ben
5.3 ? 匹配0个或一个字符(最多不超过一次)
5.4 为重复匹配次数设定一个精确的值。如 #[0-9A-Fa-f]{6} 可用来匹配RGB值(6位的十六进制数
值)
5.5 为重复匹配次数设定一个区间,如 \d{2,4}用来匹配2到4位的数字。
5.6 至少重复多少次,如 {3,} 匹配至少重复3次
5.7 防止过度匹配。* 和 + 都是“贪婪型”元字符,他们在进行匹配时的行为模式是多多益善而不是适
可而止的。下表是常见的贪婪型元字符和对应的懒惰型版本。
贪婪型元字符 | 懒惰型元字符 |
* | *? |
+ | +? |
{n,} | {n,}? |
6. 位置匹配
6.1 由 \b 指定的单词边界,用来匹配一个单词的开始或结尾。如 \bcat\b 可以匹配 Thecat
scattered 中的第一个cat,而不能匹配第二个。
简单来说, \b 匹配的是这样一个位置,这个位置位于一个能够用来构成单词的字符(字母,数
字,下划线,即\w相匹配的字符)和一个不能用来构成单词的字符(与\W相匹配的字符)之间。
6.2 字符串边界:^ 用来定义字符串开头, $用来定义字符串结尾
注: ^ 是有着多种用途的元字符之一,只有当它出现在一个字符集合里并紧跟在[ 后面时,才能
发挥求非作用。
6.3(?m) 记号是用来启用分行匹配模式的,该模式将使得RegEx引擎把行分隔符当做一个字符串分隔
符来对待。在分行匹配模式下,^ 不仅匹配正常的字符串开头,还将匹配行分隔符(换行符)后
面的开始位置(该位置是不可见的);类似地 $不仅匹配正常的字符串结尾,还将匹配行分隔符
后面的结束位置。
使用时,(?m)必须出现在整个模式的最前面。
注: 1.很多RegEx实现不支持(?m);
2. 有些RegEx实现还支持使用 \A 和 \Z 来定义一个字符串的开头和结尾,但 \A 和 \Z 不会因
为
加上了(?m)前缀而改变行为 。
sublime里面不要用简单的ctrl-f了,再加上个Alt+R吧, 恩。
这次从印象笔记里直接拷过来居然格式没有问题,略神奇, 恩。