1. 匹配单个字符
. 可以匹配任意单个字符。(大部分不能匹配换行符)
2. 匹配一组字符
[ ]定义一个字符集合;0-9、a-z定义一个字符区间;^取非操作。
abc[^0-9] //abc开头,最后一位不为数字
3. 元字符
3.1 匹配空白字符
元字符 | 说明 |
---|---|
[\b] | 回退一个字符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符 |
3.2 匹配特定字符
元字符 | 说明 |
---|---|
\d | 数字字符,等价[0-9] |
\D | 非数字字符,等价[^0-9] |
\w | 大小写+下划线+数字,等价[a-zA-Z0-9_] |
\W | 对上面的取非,等价[^a-zA-Z0-9_] |
\s | 任何一个空白字符,等价[\f\n\t\v\r] |
\S | 对上取非 |
4. 重复匹配
- + 匹配1个或多个字符
- * 匹配0个或多个字符
- ?匹配0个或1个字符
+和*是贪婪型元字符,会尽可能多地匹配内容,?是懒惰型。
[\w.]+@\w+\.\w+ //匹配邮箱地址
a.+c //这个就能匹配abcabcabcabc
- {n} 匹配n个字符
- {m,n} 匹配m~n个字符
- {m, }至少匹配m个字符
5. 位置匹配
- \b 匹配一个单词边界
- \B匹配非单词边界的位置
- ^ 匹配字符串开头
- $ 匹配结尾
^\s*\/\/.*$ //匹配以//开头的注释行
6. 子表达式
- () 定义子表达式
- | 把左边和右边看成两个部分,只要有一个匹配就可
(ab){2,} //匹配至少两个ab相连
(19|20)\d{2} //匹配19或者20开头的年份
7. 回溯引用
\n表示引用第n个子表达式,其与引用的子表达式匹配内容一致。
<(h[1-6])>\w*?<\/\1> //匹配HTML的标题元素<h1>x</h1>
8. 替换
//查找正则表达式
(\d{3})(-)(\d{3})(-)(\d{4})
//替换正则表达式
//在第一个子表达式查找的结果加上 ()
//然后加一个空格
//在第三个和第五个字表达式查找的结果中间加上-进行分隔。
($1) $3-$5
8.1 大小写转换
元字符 | 说明 |
---|---|
\l | 把下个字符转换为小写 |
\u | 把下个字符转换为大写 |
\L | 把\L 和\E 之间的字符全部转换为小写 |
\U | 把\U 和\E 之间的字符全部转换为大写 |
\E | 结束\L 或者\U |
(\w)(\w{2})(\w) //查找正则
$1\U$2\E$3 //将第二个和第三个字符转为大写
9. 前后查找
- ?= 向前查找,匹配文本不出现在匹配结果里,必须在子表达式中使用。
.+(?=:) //匹配网址,返回http而不是http:
- ?<= 向后查找,匹配文本不出现在匹配结果里,必须在子表达式中使用。
(?<=\$)[0-9.]+ //匹配金钱数目,返回23.54而不是$23.54
- 取非操作用!
10. 嵌入条件
- 回溯引用条件:先判断某个子表达式,若匹配则继续匹配后续内容。
//(\() 匹配一个左括号
//?(1) 当表达式1匹配,则继续后续匹配,这里是匹配右括号
(\()?abc(?(1)\))
- 前后查找条件:在向前查找或向后查找操作取得成功后,才继续匹配后续内容。极少用到。