1.正则表达式:记录文本的规则的代码
\b:元字符,单词分界处,匹配一个位置
.:元字符,匹配出了除了换行符以外的任意字符
*:元字符,指定*前边的内容可以连续重复以使整个表达式得到匹配
\d:元字符,匹配一位数字
\s:匹配任意的空白字符,如空格,制表符,换行符,中文全角空格
\w:匹配字母,数字,下划线,汉字
\d+:匹配一个或多个连续的数字,匹配重复一次或多次
^:匹配字符串的开始
&:匹配字符串的结束
?:重复0次或者一次
{n}:重复n次
{n,}:重复n或者更多次
{n,m}:重复n到m次
2.字符类
[a,e,i,o,u] [.?!] [0-9]
3.分支条件
“|”:从左到右,顺序
4.分组
用小括号来指定表达式(分组),再用大括号指定重复次数
5.反义
\W:匹配任意不是字母,数字,下划线,汉字的字符
\S:匹配任意不是空白符的字符
\D:匹配任意非数字的字符
\B:匹配不是单词开头或者结束的位置
[^x]:匹配除了x以外的任意字符
6.使用小括号的特定用途
捕获:(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,同(?‘name‘exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言:(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释:(?#comment)
7.贪婪与懒惰
一般情况匹配尽可能多的字符:a. *b 贪婪
懒惰:a.*?b
*?:重复任意次,单尽可能少重复
??:重复0次或者1次,但尽可能少重复
{n,m}?:重复n~m次,但尽可能少重复
8.处理选项
IgnoreCase:忽略大小写
Multiline:多行模式
Singleline:单行模式
IgnorePatternWhiteSpace:忽略空白
Explicitcapture:显示捕获
平衡组,递归匹配:
(?‘group‘):把捕获的内容命名为group,并压入堆栈stack
(?‘-group‘):从堆栈中弹出最后压入堆栈的名为group的捕获内容,若堆栈本来为空,则本分组的匹配失败
(?(group)yes|no):若堆栈上存在以名为group的捕获内容的话,继续匹配yes部分表达式,否则匹配no部分
(?!):零宽负相先行断言,无后缀表达式,故匹配总是失败
\cN:ASII控制字符,比如\cC代表ctrl+C
\A:字符串开头,类似^,但不受多行选项的影响
\Z:字符串结尾或行尾,不受多行选项影响
\G:当前搜索的开头
\P{name}:Unicode中命名为name的字符类
(?>exp):贪婪表达式
(?<x>-<y>exp):平衡组
(?im-nsx:exp):在字表达式exp中改变处理选项
(?im-nsx)为表达式后面的部分改变处理选项
(?(exp)ye|no):零宽正向先行断言,能匹配yes,不能,no表达式
(?(name)yes|no):命名为name的组捕获到了内容,则为yes,否则no
邮件:\w+([-+.‘]\w+)*@\w+([-.]\w)*\.\w+([-.]\w+)*