正则表达式
//元字符
. 换行符以外任意字符
\w 字母/数字/下划线/汉字
\s 任意空白符
\d 数字
\b 单词开始和结尾
^ 字符串开始
$ 字符串结束
//字符转义
使用\来取消字符的特殊意义
//重复
* 重复任意次
+ 重复一次或多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次以上
{n,m} 重复n到m次
//字符类
[aeiou] 匹配aeiou任何一个英文字母
[0-9] 匹配0到9任何一个数字
//分支条件
| 匹配成功,就不再继续匹配。\d{4}|\d{5}
//分组
(01\d){5} 分组内容重复5次
//反义
\D 大写后匹配非数字
[^aeiou] 匹配除aeiou以外任意字符
//后向引用
\1 分组1匹配的文本,\b(\w+)\b\s+\1\b匹配像go go重复单词
(exp) 匹配exp并捕获文本到命名组里
(?<name>exp) 匹配exp并捕获文本到名称为name的组里
(?:exp) 匹配exp,不捕获文本,也不分配组号
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面不是exp的位置
(?<!exp) 匹配前面不是exp的位置
(?#comment) 注释
//贪婪与懒惰
a.*?b 匹配最短的,以a开始,以b结束的字符串。
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,这被称为贪婪匹配。懒惰匹配,也就是匹配尽可能少的字符,化为懒惰匹配模式,只要在它后面加上一个问号?。
//处理选项
IgnoreCase 忽略大小写
Multiline 多行模式
Singleline 单行模式,更改.的含义,使它与每一个字符匹配(包括换行符\n)。
IgnorePatternWhitespace 忽略空白
ExplicitCapture 显式捕获
//平衡组/递归匹配
平衡组的一个最常见的应用就是匹配HTML。
< #最外层的左括号
[^<>]* #最外层的左括号后面的不是括号的内容
(
(
(?'Open'<) #碰到了左括号,在黑板上写一个"Open"
[^<>]* #匹配左括号后面的不是括号的内容
)+
(
(?'-Open'>) #碰到了右括号,擦掉一个"Open"
[^<>]* #匹配右括号后面不是括号的内容
)+
)*
(?(Open)(?!)) #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败
> #最外层的右括号
//其他
\n 换行符
\t 制表符
\r 回车