正则表达式(通用)

正则表达式–表格

  • 注意: 由于每个软件的正则表达式的转义字符是不一样的,比如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])


image-20200713131134821

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:]]    %代表一个空格, 
    

参考链接:正则表达式必知必会(已修整)


次;