正则表达式–表格
- 注意: 由于每个软件的正则表达式的转义字符是不一样的,比如R中一般用
\\.
来代表匹配小数点.
- 表格中的
\
,但在软件中可能需要\\
才能表达出来,eg:\d
匹配任意一个数字, 可能需要使用\\d
1. 基本的元字符
元字符 | 说明 |
---|---|
. |
匹配任意单个字符,字母、数字甚至是.字符本身 |
| | 逻辑或操作符 |
[ ] |
匹配该字符集合中的一个字符 (各个字符之间是or关系) **注意: ** [.] 只匹配点本身,不是特殊字符,不用转义. |
[^ ] |
对字符集合求非 就是排除该字符集合 [^0-9] : 匹配任何不适数字的字符 |
- |
定义一个区间,[A-Za-z09] : 匹配(大小)字母和数字- 只有出现在[] 之间才是元字符- 出现在其他地方,则表示一个普通字符 |
\ |
对下一个字符进行转义 |
2. 数量元字符
元字符 | 说明 |
---|---|
* |
匹配前一个字符(或字符集合或子表达式)的零次或多次重复 |
+ |
匹配前一个字符(或字符集合或子表达式)的一次或多次重复 |
? |
匹配前一个字符(或字符集合或子表达式)的零次或一次重复 |
*? |
* 的懒惰型版本 |
+? |
+ 的懒惰型版本 |
{n} |
匹配前一个字符(或字符集合或子表达式)的n次重复 |
{m,n} |
匹配前一个字符(或字符集合或子表达式)至少m次且至多n次重复 |
{n, } |
匹配前一个字符(或字符集合或子表达式)n次重复或更多次重复(至少n次) |
{n, }? |
{n, } 的懒惰型版本 |
3. 位置元字符
元字符 | 说明 |
---|---|
^ |
匹配字符串的开头 |
$ |
匹配字符串的结束 |
\A |
匹配字符串的开头(大多数语言不支持, 类似^ ) |
\Z |
匹配字符串的结束(大多数语言不支持, 类似$ ) |
\< |
匹配单词的开头(是\b的更细粒度控制,支持的语言并不多见) |
\> |
匹配单词的结束(是\b的更细粒度控制,支持的语言并不多见) |
\b |
匹配单词的边界(开头或结束) eg: \bcap\b : 表示匹配cap 这个完整单词. 因为\b 是边界,且匹配到的字符串长度为3个字符,而不是5个字符 简单的说, \b 匹配的是一个这样的位置,一边是单词(能够被 \w 匹配的字母、数字、和下划线,另一边是其他内容(能够被 \W 相匹配的字符) |
\B |
\b 的反义 |
4. 特殊字符元字符
元字符 | 说明 |
---|---|
[\b] |
退格字符 |
\c |
匹配一个控制字符 |
\d |
匹配任意一个数字字符(等价与 [0-9] ) |
\D |
\d 的反义 【匹配任意一个非数字字符(等价与[^0-9] )】 |
\f |
换页符 |
\n |
换行符 |
\r |
回车符 |
\s |
任何一个空白字符 (等价[\f\n\r\t\v] ) |
\S |
\s 的反义 (等价[^\f\n\r\t\v] ) |
\t |
制表符(Tab字符) |
\v |
垂直制表符 |
\w |
匹配任意一个字母数字字符(大小写均可)或下划线字符 (等价[a-zA-Z0-9_] ) |
\W |
\w 的反义 (等价[^a-zA-Z0-9_] ) |
\x |
匹配一个16进制数字 |
\0 |
匹配一个8进制数字 |
5. POSIX字符类
- 但并不是所用的语言都支持,JavaScript不支持
字符类 | 说明 |
---|---|
[:alnum:] |
任何一个字母或数字(等价与[a-zA-Z0-9] ) |
[:alpha:] |
任何一个字母(等价与[a-zA-Z] ) |
[:blank:] |
空格或制表符(等价与[\t ] ) 注意:这里t后面有一个空格 |
[:cntrl:] |
ASCII控制字符(ASCII 0 到31,再加上ASCII 127) |
[:digit:] |
任何一个数字(等价于[0-9] ) |
[:graph:] |
和[:print:] 一样,但不包括空格 |
[:lower:] |
任何一个小写字母(等价于[a-z] ) |
[:print:] |
任何一个可以打印的字符 |
[:punct:] |
既不属于[:alnum:]也不属于[:cntrl:]的任何一个字符 |
[:space:] |
任何一个空白符,包括空格(等价于[^\f\n\r\t\v ] ) 注意v后面有一个空格 |
[:upper:] |
任何一个大写字母(等价于[A-Z] ) |
[:xdigit:] |
任何一个16进制数字(等价于[a-fA-F0-9] ) |
6. 回溯引用和环视
- 必须在(和)里面使用
元字符 | 说明 |
---|---|
( ) |
定义一个子表达式 `( () |
\1 |
对前面的子表达式进行回溯引用,并且只能用于匹配括号里面的子表达式 eg: 匹配第1个子表达式;\2代表第2个子表达式:以此类推 有些语言用的是 $1, $2, .... 可以理解为变量 |
(?=) |
向前查找 |
(?<=) |
向后查找 |
(?!) |
负向前查找(对向前查找取非) |
(?<!) |
负向后查找(对向后查找取非) |
(?(<条件>)ture) |
嵌入条件(if then) eg: (?(backference)ture-regex) 在条件里使用回溯引用,可以不进行转义?(\1)等价?(1) |
(?(<条件>)ture\|false ) |
嵌入条件(if then else) 语法: (?(backference)ture-regex\|false-regex) |
7. 大小写转换
元字符 | 说明 |
---|---|
\E |
结束\L 或\U 转换 |
\l |
把下一个字符转换为小写 |
\u |
把下一个字符转换为大写 |
\L |
把\L 到\E 之间的字符全部转换为小写(\U 、\L 要和\E 配合使用) |
\U |
把\U 到\E 之间的字符全部转换为大写 |
8. 多行匹配模式
元字符 | 说明 |
---|---|
(?m) |
多行匹配模式(许多语言不支持) 将换行符视为字符串分隔符 |
在多行匹配模式下,^ 即可以匹配字符串的开头,也可以匹配行换行符之后的起始位置(新行)$ 不仅能匹配字符串结尾,还能匹配换行符之后的结束位置。 |
|
使用时: (?m) 必须出现在整个模式的最前面 |
9. 注意事项
- 注意: 子表达式的查找替换问题
常常需要从查找某些特定的文本, 然后从中提取某些信息, 即查找替换本身都是正则表达式组成, 例如
查: (,)([A-Za-z0-9]) % 查找 换: $1 $2 or \1 \2 % 在子表达式中间价格空格等等 注意: sublime 替换时可能出现大小写问题,一定要不要点击保持大写这个按钮,就是替换前面的那个 AB 按钮
注意:POSIX字符类的使用
通常情况下: 使用两个来
[[
开头,以]]
结束, 这是使用POSIX字符类所必须的.外层的[ ]
表示定义一个字符集合,内层的[ ]
表示POSIX字符类本身的组成部分[[:blank:]] %代表一个空格,