正则表达式必知必会
2023-10-25 12:42:43 6 举报
《正则表达式必知必会》读书笔记
作者其他创作
大纲/内容
第1章入门
第2章 匹配单个字符
2.1 匹配纯文本
全局
大小写
2.2 任意字
.
2.3 匹配特殊字符
转义 \
第3章 匹配一组字符
3.1 匹配多个字符中的一个
[abc]
3.2 利用字符区间
[0-9A-Za-z]
3.3 取非匹配
[^0-9]
注意 ^的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在^字符后面的那一个字符或字符区间
^的非效果只能是在[]里面有效果?
第4章 使用元字符
what:元字符是一些在正则表达式里有着特殊含义的字符
4.1 对特殊字符进行转义
4.2 匹配空白字符
注意: [\b] 与 \b 的区别
windows 文本结束标签:\r\n,Unix/Linux:\n
4.3 匹配特定字符类别
匹配数字(与非数字)
任何一个数字字符:\d 等价 [0-9]
任何一个非数字:\D 等价 [^0-9]
匹配字幕和数字
任何一个字母数字下划线:\w 等价 [0-9a-zA-Z_]
注意:包含了下划线
任何一个非字母数字下划线:\W 等价 [^0-9a-zA-Z]
匹配空白字符
任何一个空白字符:\s 等价 [\f\n\r\t\v]
注意:不包含 [\b]
任何一个非空白字符:\S 等价 [^\f\n\r\t\v]
匹配十六进制或者八进制数
一般不会遇到,可能特殊场景会遇到
十六进制 ,\x 开头 + 十六进制数:\x0A 等价 \n(ASCII字符10)
八进制,\0开头 + 八进制数: \011 等价 \t (ASCII字符9)
44 使用POSIX字符类
啊,没用过啊
子主题
第5章 重复匹配
5.1 有多少个匹配
匹配一个或多个:+
匹配零个或多个:*
匹配零个或一个:?
5.2 匹配重复次数
为重复匹配设定一个精确值
{3}
重复匹配设置区间
{3,4}
匹配至少多少次
{3,}
比精确值多了个逗号
5.3 防止过度匹配
贪婪匹配
*
+
{n,}
懒惰匹配
*?
+?
{n,}?
懒惰配置即在贪婪匹配后加一个 ?
第6章 位置匹配
6.1 边界
位置匹配用来解决在什么地方进行字符串匹配操作的问题
6.2 单词边界
\b \B
注意跟 [\b] 区分
6.3 字符串边界
^ $
多行匹配模式
(?m)有的正则实现不支持
多行 vs 单行匹配
单行:整个文本都是一行
子主题
多行:有换行符后算新的一行
多行
第7章 字表达式
what:把一个表达式当做一个独立的元素来使用
how:用 () 括起来
(19|20)\d{2} 以19或20开头的任何一个4位数字都将与这个模式相匹配
把必须匹配的情况考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但把不需要匹配的情况也考虑周全并确保它们都将被排除在匹配结果以外往往要困难得多
第8章 回溯引用 backrefrence
waht:用来引用前面出现过的字表达式
how:\0 == 整个正则表达式,\1 === 前面出现的第一个子表达式,\5 === 前面第5个子表达式
注:用 () 起来的叫子表达式
8.3 回溯引用在替换操作中的应用
需要分2个表达式写,一个用来搜索,一个用来替换
js里面,用$n 来表示位置,有的是\n 来表示位置(n为一个数字)
大小写转换:
第9章 前后查找
what:查找就是必须匹配规则,但是不跟着返回,又叫不消费(consume)
向前查找:语法上是一个以?= 开头的子表达式
向后查找
语法:?<=
有些语言不支持
第10章 嵌入条件
1.2 表达式里的特定条件
?
?=
?<=
根据回溯引用来进行条件处理
根据前后查找来条件处理
语法
使用?
e.g. (?(1)\s*</[Aa]>)是一个回溯引用条件——?(1)的含义是:如果第一个回溯引用(具体到本例存在,则使用\s*</[Aa]>继续进行匹配
注意 :?(1)检查第一个回溯引用是否存在。在条件里,回溯引用编号(本例中的1)不需要被转义。因此,?(1)是正确的,?(\1)不正确(但后者通常也能工作)。
0 条评论
下一页