正则表达式笔记

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的字串做替换或者从某个串中取出符合某个条件的字串等。

正则表达式在线测试:
http://www.regexpal.com/

元字符

常用元字符:

代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\d 匹配数字
\s 匹配空格
\b 匹配单词的开始或结束
^ 匹配字符串的开始,如果是处理多行,意义变成行开始处
$ 匹配字符串的结束,如果是处理多行,意义变成行结束处

限定符

常用限定符:

代码 说明
* *前面的内容重复任意次
+ +前面的内容重复一次或者多次
? 重复零次或一次
{n} 重复n次
{n, } 重复次数大于等于n
{n,m} 重复次数大于等于n小于等于m

字符类

[auiou] 匹配任何一个英文元音字母
[.?!] 匹配标点符号(. ? !)

反义

代码 说明
\W 匹配任意不是字母、数字、下划线、汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^abcd] 匹配除了abcd以外的任意字符

分组

代码 说明 
(exp) 匹配exp,并捕获文本到自动命名组中
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?`name`exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给次分组分配组号
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
(?#comment) 注释

贪婪与懒惰

通常重复限定符的行为是匹配尽可能多的字符,在限定符后面加?使之成为惰性限定符,例如*?的含义为重复任意次数,但是尽可能少