1. 常用元字符

元字符 匹配
. 换行符以外的任意字符
\w 字母、数字、下划线、汉子
\s 空白符
\d 数字
\b 单词的开始或结束
^ 字符串的开始
$ 字符串的结束

常用字符串

2. 常用反义字符

元字符 匹配
\W 除了\w以外的任意字符
\S 除了\s以外的任意字符
\D 除了\d以外的任意字符
\B 除了\b以外的任意字符
[^x] 除了x以外的任意字符
[^abc] 除了a、b、c以外的任意字符

3. 字符重复次数

元字符 匹配
* 重复任意次数
+ 重复1次以上
? 重复0次或1次
{n} 重复n次
{n,m} 重复n到m次
{n,} 重复n次以上

4. 字符集范围

使用[]中括号来定义范围,例如匹配数字1~5可以使用[1~5]

字符集范围

5. 分枝,分组

使用“|”来实现分支。匹配12345-1234中的12345-1234或者12345可以使用\d{5}-\d{4}|\d{5} 表达式。值得注意的是分支顺序,分支是按先左后右的方式来匹配的。

使用“()”括号来进行分组。

字符集范围

6. 特殊的分组语法——捕获、零宽断言、注释

分类 元字符 匹配
捕获 (exp) 匹配表达式exp
  (?exp) 匹配表达式exp,并将文本捕获到名为NAME的分组中,通过\k<NAME>来引用这个分组
  (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
  (?<=exp) 匹配exp后面的位置
  (?!exp) 匹配后面跟的不是exp的位置
  (?<!exp) 匹配前面不是exp的位置
注释 (?#COMMENT) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

特殊的分组语法——捕获、零宽断言、注释

7. 贪婪与懒惰

贪婪:匹配尽可能多的。列如a.*b匹配aababaabab

懒惰:匹配尽可能少的。例如a.*?b匹配aababab

8. 处理选项

  • IgnoreCase(忽略大小写):匹配时不区分大小写。
  • Multiline(多行模式):更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不 仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及 字符串结束前的位置.)
  • Singleline(单行模式):更改.的含义,使它与每一个字符匹配(包括换行符\n)。
  • IgnorePatternWhitespace(忽略空白):忽略表达式中的非转义空白并启用由#标记的注释。
  • ExplicitCapture(显式捕获):仅捕获已被显式命名的组。

参考: