- 正则表达式中单个字符的匹配(匹配一个位置的字符,主要为一些元字符的使用)
代码/语法 说明
(1) . 匹配除换行符以外的任意字符
(2) \w 匹配字母或数字、下划线。等价于’[AZaz09_]’
(3) \s 匹配任意的空白符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]
(4) \d 匹配数字,等价于[09]
(5) \b 匹配单词的开始或结束
(6) x¦y 匹配 x 或 y
(7) [xyz] 字符集合,匹配所包含的任意一个字符
(8) [az] 字符范围。匹配指定范围内的任意字符
注意:要注意的是,在中括号中,特殊代码不会被解释成其它意义 - 反义
代码/语法 说明
(1) \W 匹配任意不是字母、数字和下划线的字符,等价于’[∧AZaz09_]
(2) \S 匹配任意不是空白符的字符。等价于 [∧\f\n\r\t\v]
(3) \D 匹配任意非数字的字符,等价于[∧09]
(4) \B 匹配不是单词开头或结束的位置
(5) [∧x] 匹配除了x以外的任意字符
(6) [∧asdfg] 匹配除了asdfg这几个字母以外的任意字符
(7) [∧az] 匹配除了小写字母以外的任意字符 - 重复
代码/语法 说明
(1) * 重复零次或更多次,等价于{0,}
(2) + 重复一次或更多次,等价于{1,}
(3) ? 重复零次或一次,等价于 {0,1}
(4) {n} 重复n次
(5) {n,} 重复n次或更多次
(6) {n,m} 重复n到m次 - 贪婪与懒惰
正则表达式默认是贪婪型的,通常的行为是匹配尽可能多的字符, 我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的重复元字符都可以被转化为懒惰匹配模式,只要在它后面加 上一个问号 ?
代码/语法 说明
(1) *? 重复任意次,但尽可能少重复
(2) +? 重复1次或更多次,但尽可能少重复
(3) ?? 重复0次或1次,但尽可能少重复
(4) {n,m}? 重复n到m次,但尽可能少重复
(5) {n,}? 重复n次以上,但尽可能少重复 - 后向引用
代码/语法 说明
(1) (exp) 匹配exp,并捕获文本到自动命名的组里
(2) (?exp) 匹配exp,并捕获文本到名称为name的组里
(3) (?:exp) 匹配exp,不捕获匹配的文本 - 位置指定和负向位置指定
代码/语法 说明
(1) (?=exp) 匹配exp前面的位置
(2) (?<=exp) 匹配exp后面的位置
(3) (?!exp) 匹配后面跟的不是exp的位置
(4) (?<!exp) 匹配前面不是exp的位置
(?=exp):零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。
(?<=exp):零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。
(?!exp):零宽负向先行断言,只会匹配后缀exp不存在的位置。
(?<!exp):零宽负向后行断言来查找前缀exp不存在的位置 - 这里呢我就用下面这个软件来测试一下上面的正则
- 匹配纯文本
(1) 纯文本看起来可能不像是个正则表达式,但它的确是。正则表达式可以包含纯文本(甚至可以只包含纯文本)。当然,像这样使用正则表达式是没什么意义,但把它作为学习正则表达式的起点还是不错的。
(2) 随便输入几个字符来测试一下纯文本匹配
(3) 我先输入qwer这个纯文本来测试 ,可以很明显的看到黄色部分的是被匹配到的纯文本
- 单个匹配
(1) .(匹配除换行符以外的任意字符),这个.就比较厉害了除了换行符都匹配
(2) \w(匹配任意不是字母、数字和下划线的字符,等价于’[∧AZaz09_]),可以看到对于在括号里范围内的都带有颜色标记,反之则无
(3) [xyz](字符集合,匹配所包含的任意一个字符),只匹配在中括号内的字符,其他的单个匹配就不一一讲解了
- 反义:它里面的正则代码是和单个匹配的意思相反,这里也不讲解了,可以看上面的解释
- 位置指定和负向位置指定,在这里呢我就用HTML代码来解释
(1) 在下面这串HTML代码中匹配出span标签和其内容 ,这里呢用到了纯文本匹配和单个匹配(.),重复(+和?),零宽先行断言(?=exp)
(2) 还是匹配出span标签和其内容,用零宽后行断言和零宽先行断言来匹配出span标签
- 正则的主要作用就是用来验证、搜索和替换,实际用到的并不多