目录

正则表达式

正则表达式

功能

搜索 替换

总表 ![regexp_table](/images/20220925_regexp/regexp_table.png)

调试工具

在线测试器 问题在于,不同的语言有不同的版本。 目前,需要精通:

  • python

  • vscode

regex101, 是学习正则表达式最有效的工具网站。 https://regex101.com/

知识点

匹配字符

匹配任意字符 .

. 可以匹配任意单个字符,除了行结束符。 注意,这个在不同流派中是不一样的:

  • ECMAScript(JavaScript),行结束符为\n,\r

  • Python,行结束符为\n

匹配特殊字符

元字符(Metacharacter) 元字符,表示这个字符有特殊含义,而不是字符本身。 \,是一个元字符,表示对其后的字符进行转义。 \s,是一个元字符,表示空白字符。

配置多个字符中的一个-[]

使用元字符[和],来定义一个字符集合。[和]不匹配任何字符,[]仅匹配一个字符,即只占一个位置。配置的字符为这个集合中的任意一个。 示例: [ns],表示匹配n或者匹配s。

特殊的集合

[0-9]
[a-z]
[A-Z]
[A-z]
[A-Za-z0-9]

集合取非 用元字符^, 表示对一个字符集合进行取非。 注意:^仅在集合中表示取非,单独使用时,可表示匹配字符串开头。

匹配空白字符
[\b] 回退 为什么带[]?
\f 换页符
\n 换行符
\r 回车符
\t 制表符 Tab键
\v 垂直制表符

组合使用 windows中,使用\r\n匹配“回车+换行”,把这个用作文本行的结束。 匹配空白行:

  • windows, \r\n\r\n

  • linux, \n\n

  • mac, \r\r

Fun: 回车和换行的区别:https://baijiahao.baidu.com/s?id=1732246005673869826&wfr=spider&for=pc

匹配特定字符
\d 任何一个数字 [0-9]
\D 任何一个非数字 [^0-9]
\w 任何一个字母(大小写均可)/数字/下划线 [a-zA-Z0-9_]
\W \w取反 [^a-zA-Z0-9_]
\s 任何空白字符 [\f\n\r\t\v]
§ 任何非空白字符 [^\f\n\r\t\v]
\x 匹配十六进制
\0 匹配八进制

重复匹配

+ 一个或多个
* 零个或多个
? 零个或一个
{N} 匹配N次
{N,M} 匹配N到M次
{N,} 匹配至少N次

位置匹配

\b 单词开头或者结尾
\B \b取反,不匹配边界
^ 字符串开头
$ 字符串结尾
(?m) 分行模式
分行模式(?m)

在分行匹配模式下,^不仅匹配正常的字符串开头,还将匹配行分隔符(换行符)后面的开始位置;$不仅匹配正常的字符串结尾,还将匹配行分隔符(换行符)后面的结束位置。 注:有很多正则表达式,不支持(?m)

子表达式

元字符(和), 表示子表达式。 注意:替换时符号不同:

  • python, \1

  • javascript, $1

回溯、向前查找、条件表达式

参考

本来想参考官方介绍,但是始终没有找到,只找到了Virutal Studio的说明。 https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions

在VSCODE的task doc中

Tip: We have found the RegEx101 playground, which has an ECMAScript (JavaScript) flavor, to be a great way to develop and test regular expressions.