https://www.bilibili.com/video/BV1da4y1p7iZ?from=search&seid=1033822496613978103
https://www.bilibili.com/video/BV12b41147y5?p=9
? 表示0个或者1个
* 表示0个或者多个
+ 表示出现1次以上的字符
{n} 表示出现n次
{low,height} 表示出现在此区间内
{n,} 表示出现大于n次
(字符字符) 使用括号括起来多个字符 即将多个字符视为一个整体 可以继续使用上面出现的方法
或 |
a (cat|dog) 返回a cat 或者 a dog
比如我们想要获得由abc三个字母组成的文本 使用 [abc]
[^0-9]所有非数字字符
元字符
\d 数字字符 \D 非数字字符
\w 所有的英文字符 数字 下划线 \W 非单词字符
\s 空白符 包含Tab和换行符 \S 非空白字符
. 代表任意字符 但是不包括换行符
\b 匹配单词的开始 或 结束
^a 只会匹配行首的a
a$ 只会匹配行尾的a
<.+> 贪婪匹配
<.+?> 懒惰匹配
分支条件
用|把不同的规则分隔开
从左到右的测试每个条件,如果满足了满足某个分支的话,就不会去再管其他的条件了
处理选项
语法 | 说明 |
IgnoreCase | 匹配是不区分大小写 |
Multiline | 更改^和$的含义,使他们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含义是:匹配\n之前的位置以及字符串结束前的位置) |
Singleline | 更改 . 的含义,使他与每一个字符匹配(包括换行符\n) |
IgnorePatternWhitespace | 忽略表达式中的非转义空白并启用由#标记的注释 |
ExplicitCapture | 仅捕获已被显式命名的组 |
分组的命名(?<groupname>exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
\1 或者 \k<groupname> 引用组
零宽断言
?= 零宽度正预测先行断言,自身出现的位置的后面能匹配表达式exp
\b\w+(?=ing\b)
I'm singing while you're dancing.
?<=exp 零宽度正回顾后发断言,自身出现的位置的前面能匹配表达式exp
(?<=\bre)\w+\b
reading a book