正则表达式
介绍
正则表达式就是一种文本模式---用来对字符串进行增删改查
正则表达式使用单个字符串来进行描述,匹配一系列匹配某个句法规则的字符串。
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合条件的子串等。
语法
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起创建更大的表达式。
正则表达式的组件可以是:
- 单个的字符
- 字符集合
- 字符范围
- 字符间的选择或者所有这些组件的任意组合
1. 普通字符
包括所有大写和小写字母,所有数字,所有标点符号和一些其他符号
| 符号 | 含义 |
|---|---|
| [] | 匹配的集合 |
| ^ | 取反(出现在集合中)或者是字符串的开始位置 |
| [a-z] | 表示一个区间,字母a-z |
| \. | 匹配 . |
| \s | 匹配空白符(包括换行) |
| \S | 匹配非空白符(不包括换行) |
| \w | 匹配字母、数字、下划线 === [A-Za-z0-9_] |
| \W | 匹配除(字母、数字、下划线)之外的 |
| \b | 匹配一个单词边界,也就是指单词和空格间的位置 |
| \B | 匹配非单词边界。er\B 能匹配 verb 中的 er,但不能匹配 never 中的er |
| \d | 匹配一个数字 |
| \D | 匹配非数字 |
2. 特殊字符
特殊字符就是一些有特殊含义的字符,要匹配这些字符,必须首先使字符转义。
| 符号 | 含义 |
|---|---|
| $ | 匹配输入字符串的结尾位置 |
| () | 标记一个子表达式的开始和结束位置 |
| * | 匹配前面的子表达式0次或者多次 (≥0) |
| + | 匹配前面的子表达式1次或者多次 (≥1) |
| . | 匹配除换行符 \n 之外的任何单字符。 |
| [ | 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 |
| ] | 标记一个中括号表达式的结束。要匹配 ],请使用 \]。 |
| ? | 匹配前面的子表达式0次或1次 (=0 || =1)。要匹配 ? 字符,请使用 ?。 |
| \ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符 |
| ^ | m匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 |
| | | 指明两项之间的一个选择。要匹配 |
3. 限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
*:0次或者多次+:1次或者多次?:0次或者1次{n}:匹配确定的n次{n,}:至少匹配n次{n,m}:至少n次,至多m次在
*和+之后添加?表示最小匹配
4. 捕获元
?=:exp1(?=exp2)查找exp2前面的exp1?<=:(?<=exp2)exp1查找exp2后面的exp1?!:exp1(?!exp2)查找后面不是exp2的exp1?<!:(?<!exp2)exp1查找前面不是exp2的exp1
修饰符(常用)
| 修饰符 | 含义 | 描述 |
|---|---|---|
| i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
| g | global - 全局匹配 | 查找所有的匹配项。 |
| m | multiline - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
| s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
常用正则表达式
- email:
**^\w+([-+.]\w+)\*@\w+([-.]\w+)\*\.\w+([-.]\w+)\*$**- phone:
**^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$**- Id(15或者18位):
**(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)**- password(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
**^[a-zA-Z]\w{5,17}$**- password(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):
**^(?=.\*\d)(?=.\*[a-z])(?=.\*[A-Z])[a-zA-Z0-9]{8,10}$**- date(
yyyy-mm-dd):**^\d{4}-\d{1,2}-\d{1,2}**
@keyboarder-yang