《学习正则表达式》笔记
《学习正则表达式》笔记
- 简单的匹配模式
- 匹配数字 d或[0-9]
- 匹配非数字 D或[^0-9]
- 选择匹配 匹配0或1 [01]
- 匹配单词 w 或者 [A-Za-z0-9]
- 匹配非单词 W 或者[^A-Za-z0-9]
- 匹配8进制 o
- 匹配16进制 x
- 匹配unicode值 u
- 匹配换行 n
- 匹配空字符 s 或者 [ tnr]
- 匹配非空字符 S
- 匹配5个字符 s{5}
- 匹配非换行字符 .
- 匹配1个或0个 ?
- 匹配0个或多个 *
- 匹配1个或多个 +
- 否定是 ^
- 匹配开头 脱字符 ^
- 匹配末尾 美元符号 $
- 边界
- 行边界 multiline模式下,将所有行视为一个行 ^ $
- 单词边界 btheb 单词边界 b 非单词边界 B
- 主题词起始与终止位置 A匹配主题词起始位置 Z匹配终止位置
- 引用字符串字面值边界 ()用于引用字符串
- 使用元字符的字面值 \Q$\E则会匹配$
- 选择分组和向后引用
分组的选择操作 (the|The|THE)
忽略大小写匹配为 (?i),所以上面可以改为 (?i)the
子模式(t|T)h(e|eir) 或[tT]h(e|eir)
子模式匹配单词 b[tT]h[eir]*b 可以匹配单词 thee或Thee Thrr
捕获分组和向后引用 捕获分组用(),向后引用用 1(引用第一个分组) 2(引用第二个捕获的分组)
命名分组 <?(name)…> 或者 (?name…) python里面的分组命名(?P<name>…) python里面引用分组为(?P=name)
捕获分组会将捕获的字符放在内存当中,可以在程序中是此案调用。分组最多可以捕获9个
非捕获分组 是捕获后不会放在内存中的分组
(the|THE|THe)
(?:the|THE|THe)
(?:(?i)the)
最推荐的写法是(?i:the)
- 字符组
匹配一个特定的字符,比如需要匹配元音字母[aeiouAEIOU]
匹配a-z [a-z]
匹配数字[0-9] 匹配大于4的数字[5-9]
匹配两位数的偶数 b[1-9][02468]b
字符取反,匹配非元音字母[^aeiouAEIOU]
并集与差集,并集[[]]匹配0-3或6-9的数 [0-3[6-9]]
差集,与集合的逻辑一样,自然要用到否定了。匹配a-z之间,但m-r除外的字符[a-z[^m-r]]
- 匹配unicode字符
x和X可以匹配的最大值255 ff
u可以匹配的最大值为65535 ffff
U可以匹配的最大是7fffffff
匹配控制字符 cx
- 贪心,懒惰和占有
>贪心量词,尽力匹配最多。。比如 *
懒惰量词 *? 加? 则量词由贪心变成懒惰
也就是 .* 和 .*?的区别
匹配的m-n次 a{2-4}
懒惰 5可以匹配一个5
5?也可以匹配一个5
而5??则不能匹配5
5*可以匹配0个或多个5
而5*?则不能匹配5
5+可以匹配一个或多个5
5+?则只能匹配一个5
懒惰?让表达式匹配最少的5
占有量词
占有量词和贪心匹配一样,尽可能多地选定更多的内容。与谈心不同的是,她不会回溯,
.*+ 占有式匹配0次或多次
++ 匹配一次或多次
?+ 匹配零次或多次
{n}+ 匹配n次
{n,}+ 匹配n次或更多次
{m,n}+ 匹配m-n次
- 环视
正前瞻 (?=name) 匹配name前面 比如 ruhuorutu(?=liujian)匹配liujian之前的ruhuorutu 比如ruhuorutuliujian。。。两个词一定要紧靠,不能有空格或者其他字符隔开
反前瞻 (?!name)
正后顾 (?<=name)
反后顾 (?<!name)
- 用html标记文档
>匹配标签 <[a-zA-Z][^>]*>
>
Categories: 正则表达式