正则表达式

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+)*

posted @ 2018-03-15 00:47  起个名字真麻烦  阅读(1566)  评论(0编辑  收藏  举报