正则表达式(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) | 注释 |
贪婪与懒惰
通常重复限定符的行为是匹配尽可能多的字符,在限定符后面加?
使之成为惰性限定符,例如*?
的含义为重复任意次数,但是尽可能少