什么是正则表达式
是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串
- 咳咳!说人话
用来匹配目标字符串的符号(你有更优雅的描述,欢迎打脸)
- 谁适合学习正则表达式
不论你从事什么职业,如果你经常要进行文本操作,大量的重复性劳动你觉得很没意思,那么赶快学习正则表达式吧。如果你是并且还不熟悉正则表达式,那么别人会鄙视你。你还在等什么呢?
转义符
- 如要匹配英文句号点
.
可用转义表示 \. - 描述本身 \\ 等
元字符
表达式 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\w | 匹配字母或数字或下划线或汉字 |
\b | 匹配单词的开始或结束 |
反义
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况
表达式 | 说明 |
---|---|
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
重复
表达式 | 说明 |
---|---|
* | 重复零次或多次 |
+ | 重复一次或多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或多次 |
{n,m} | 重复n到m次 |
字符类
在方括号中指定一个字符 "范围"。如 [0-9] 等同于 \d
分支条件
分枝条件相当于条件 "或",如果满足其中任意一种规则都应该当成匹配,方法是用 | 把不同的规则分隔开
如: 0\d{2}-\d{8}|0\d{3}-\d{7}
分组
使用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数
-
\d{1,3}
匹配1到3位的数字 -
(\d{1,3}\.){3}
匹配三位数字加上一个英文句号,重复3次
后向引用
后向引用用于重复搜索前面某个分组匹配的文本
表达式 | 说明 |
---|---|
(exp) | 匹配 exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配 exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
(?:exp) | 匹配 exp,不捕获匹配的文本,也不给此分组分配组号 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp>) | 匹配前面不是exp的位置 |
(?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
? : (
是不是还没懂?让我们来做一些例子吧
- 以下案例为基础案例,可用于学习
匹配 img 开头 .jpg .png 结尾的字符串(爬取图片时很有用)
"img.*(\.jpg|\.png)"
只匹配汉字
"[\u4e00-\u9fa5]"
长度为8位以上的用户密码(可以是字母数字下划线和.(点))
"[0-9a-zA-Z_\.]{8,}"
匹配电子邮箱
"\w.+@\w.+\.\w+"
匹配手机号
"(13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7}"
匹配身份证号
"\d{17}[0-9Xx]"
匹配时间
"([012]\d):(\d{2}):(\d{2})"
匹配日期
"(\d{4})-([01]\d)-([012]\d)"
网友评论