一.概述
1.正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)
2.正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
3.例如:/^[0-9]+abc$/
(1)为匹配输入字符串的开始位置
(2)[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个
(3)abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置
4.正则表达式定义:描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等
5.* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
二.普通字符与元字符
1.普通字符:普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号
字符 |
描述 |
[^A-Z] |
匹配以除了A-Z外的所有内容 |
[A-Z] |
表示匹配A-Z这个区间 |
. |
匹配所有换行符,回车以外的所有单个字符 |
\w |
匹配字母数字下划线 等价于[a-zA-Z0-9_] |
\W |
匹配除字母数字下划线外的内容 |
\s |
匹配所有空白字符,包括换行 |
\S |
匹配所有的非空白字符,不包括 |
\d |
匹配0-9的数字 |
\D |
匹配除了数字的所有内容 |
^ |
匹配字符串开始的字符 |
$ |
匹配字符串结尾的字符 |
\b |
匹配一个字符边界 |
\B |
匹配一个非字符边界 |
(pattern) |
匹配 pattern 并获取这一匹配 |
2.非打印字符:
字符 |
含义 |
\f |
匹配一个换页符 |
\n |
匹配一个换行符 |
\t |
匹配一个制表符 |
\v |
匹配一个垂直制表符 |
\r |
匹配一个回车 |
| |
指明两项之间的一个选择 |
3.限定符:出现在范围表达式后限制匹配次数
字符 |
描述 |
* |
匹配前面的子表达式零次或多次 |
+ |
匹配前面的子表达式一次或多次 |
? |
匹配前面的子表达式零次或一次 |
{n} |
匹配n次 |
{n,} |
最少匹配n次 |
{n,m} |
n<=匹配次数<=m |
4.选择:
(1)用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
(2)() 表示捕获分组,() 会把每个分组里的匹配的值保存起来, 多个匹配值可以通过数字 n 来查看(n 是一个数字,表示第 n 个捕获组的内容)
5.修饰符:写在正则表达式外,指定额外的匹配策略
修饰符 |
含义 |
描述 |
i |
ignore - 不区分大小写 |
将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别 |
g |
global - 全局匹配 |
查找所有的匹配项 |
m |
multi line - 多行匹配 |
使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾 |
s |
特殊字符圆点 . 中包含换行符 \n |
默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n |
6.匹配举例:
三.优先级
1.正则表达式从左到右进行计算,并遵循优先级顺序
2.相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表说明了各种正则表达式运算符的优先级顺序(降序):
运算符 |
描述 |
\ |
转义符 |
(), (?:), (?=), [] |
圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} |
限定符 |
^, $, \任何元字符、任何字符 |
定位点和序列(即:位置和顺序) |
| |
替换,”或”操作 字符具有高于替换运算符的优先级,使得”m|food”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m|f)ood”。 |