感觉正则表达式还挺常用的,之前学了,但总是容易忘记,这一次好好整理一下笔记,希望下次需要使用时候,可以更快的使用
工具
基础语法
Flag标志
i
忽略大小写
使我们编写的表达式不再大小写敏感
g
全局
全局标志使表达式选中所有匹配项,如果不启用全局标志,那么表达式只会匹配第一个匹配项
m
多行
正则表达式将所有文本视作一行。但如果我们使用了多行标志,它就会单独处理每一行。
组和引用
()
组,我们可以对一个表达式进行分组,并用这些分组来引用或执行一些规则
在成为组之后可以使用$1
进行按照顺序替换
\1
引用,1表示分组的顺序,\2表示引用第二组
(?:)
非捕获组,可以让一个组不被引用,这个组就不会被引用,其他的组重新拍好顺序之后,按照顺序替换
字符类
[abc]
字符集,如果一个词中的字符可以是各种字符,我们就将所有的可选字符写进中括号 [] 中
[^abc]
否定字符集,一个词中的字符否定那几个
在中括号中是否定,如果在外面就是开头
[a-z]
范围,为了查找指定范围的字母,我们需要将起始字母和结束字母写进 [] 中,中间用连字符 - 分隔。区分大小写
.
点,可以匹配任何字符,包括特殊字符和空格
\w
单词,查找字母、数字和下划线
\W
非单词,匹配除字母、数字和下划线之外的字符。
\d
数字
\D
非数字
\s
空白符
\S
非空白符
量词与分支
+
加号,表示加号前面的字符出现一次或多次
*
星号,表示一个字符不出现或者出现多次
{1,3}
重复,在一个字符的末尾加上大括号表示这个字符可以出现的次数
?
可选,表示一个字符可选可不选
|
分支,竖线允许一个表达式包含多个不同的分支。所有分支用 | 分隔
比如,开头是
p
或则P
,可以使用(p|P)
或者[pP]
\
表示转义字符
转义字符可以使用在*
,让他不再是出现多次的意思,而是普通的字符
锚点
^
字符串或行的开头
$
字符串或行的末尾
\b
单词边界,表示边界不会匹配不在边界中的
\btree\b,就只会匹配tree,不会匹配trees什么的
用来匹配完整的单词,数字
\B
非单词边界
匹配一个整体中的一部分
前瞻和后顾
(?=)
正向先行断言
为了只匹配后面有 PM 的数值,我们需要在表达式后面使用正向先行断言 (?=),并在括号内的 = 后面添加 PM
(?!)
负向先行断言
! 后面添加 PM,从而只匹配没有 PM 的数值
比如:
\$(?!\d+)
匹配后面不是数字的$
符号
(?<=)
正向后行断言
为了只匹配前面带有 $ 的数字。我们要在表达式前面使用正向后行断言 (?<=),并在括号内的 = 后面添加 $。
(?<!)
负向后行断言
匹配前面没有$的数字, (?<!$)\d+
匹配
贪婪匹配
正则表达式默认执行贪婪匹配。这意味着匹配内容会尽可能长
懒惰匹配
与贪婪匹配不同,懒惰匹配在第一次匹配时停止
.* 会尽可能多的进行匹配,只看首尾,不会在意中间字符的匹配
.*? 会匹配尽可能少的字符,但会匹配所有结果