学习内容:
《正则表达式30分钟入门教程》
学习网站:
- 正则表达式30分钟入门教程
- Mozilla RegExp正则表达式
学习笔记:
1. 什么是正则表达式?
正则表达式是记录文本规则的代码!
元字符 | 说明 | 举例 |
---|
. | 匹配除换行符以外的任意字符 | .* : 匹配任意数量的不包含换行的字符 |
* | 匹配前面的模式 0 或多次 | /bo*/ : 匹配 “bird” 中的 “b” |
+ | 匹配前面的模式 1 或多次 | /bo*/ : 不匹配 “bird” 中的 “b” |
^ | 匹配字符串的开始 | /^A/ : 不匹配 “an A” 中的 “A”,但匹配 “An A” 中的 “A” |
$ | 匹配字符串的结束 | /t$/ : 不匹配 “eater” 中的 “t”,但匹配 “eat” 中的 “t” |
\b | 匹配单词的开始或结束 | \b\w{6}\b : 匹配6个字符的单词 |
\d | 匹配一位数字,等价于[0-9] | \d+ : 匹配1个或更多连续的数字 |
\s | 匹配一个空白符,包括空格、制表符、换页符、换行符等。 | /\s\w*/ : 匹配“foo bar”中的 ’ bar’ |
\w | 匹配字母或数字或下划线或汉字 | \b\w{6}\b : 匹配6个字符的单词 |
注:此为总览,后面会细分为:
- 字符类别(Character Classes)
- 字符集合(Character Sets)
- 边界(Boundaries)
- 分组(Grouping)
- 反向引用(back references)
- 数量词(Quantifiers)
3. 字符转义
`.` -> `\.`
`*` -> `\*`
`\` -> `\\`
`(` -> `\(`
`)` -> `\)`
4. 数量词(Quantifiers)
字符 | 说明 |
---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
5. 字符集合(Character Sets)
字符 | 说明 | 举例 |
---|
[xyz] | 一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符’-‘指定一个范围 | [abcd] 等价于 [a-d],匹配”brisket”中的’b’和”chop”中的’c’ |
[^xyz] | 一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 ‘-’ 指定一个范围内的字符 | [^abc] 等价于 [^a-c]。 第一个匹配的是 “bacon” 中的’o’ 和 “chop” 中的 ‘h’ |
6. 分支条件
注1:使用分枝条件时,要注意各个条件的顺序,例如:美国邮编的规则是5位数字,或者用连字号间隔的9位数字。匹配美国的邮政编码:\d{5}-\d{4}|\d{5}
如果改成:\d{5}|\d{5}-\d{4}
,那么就只会匹配5位的邮编(以及9位邮编的前5位)。
注2:匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
7. 分组(Grouping)
字符 | 说明 |
---|
(x) | 匹配 x 并且捕获匹配项。 这被称为捕获括号(capturing parentheses) |
(?:x) | 匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses) |
注:(x)主要用于重复多个字符:用小括号来指定子表达式(分组),然后指定这个子表达式的重复次数了,还可以对子表达式进行其它一些操作。
常用实例
1. 匹配QQ号,必须为5位到12位数字:
^\d{5,12}$。
2. 匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等:
/\(?0\d{2}[) -]?\d{8}/
3. 匹配IP地址,如111.222.123.234:
/(2[0-4]\d|25[0-5]|[0-1]?\d\d){3}(2[0-4]\d|25[0-5]|[01]?\d\d)/
4. 匹配手机号码,如13888888888:
/[1][358]\d{9}/