写正则表达式困难的不是匹配到想要的内容,而是尽可能的不匹配到不想要的内容。
. 字符在正则表达式代表着可以代表任何一个字符(包括它本身)
findall返回的是所有符合要求的元素列表,包括仅有一个元素时,它还是给你返回的列表。
+的作用是将前面一个字符或一个子表达式重复一遍或者多遍。
*跟在其他符号后面表达可以匹配到它0次或多次
[]代表匹配里面的字符中的任意一个
[^]代表除了内部包含的字符以外都能匹配
正则表达式 代表的匹配字符
[0-9] 0123456789任意之一
[a-z] 小写字母任意之一
[A-Z] 大写字母任意之一
\d 等同于[0-9]
\D 等同于[^0-9]匹配非数字
\w 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线
\W 等同于[^a-z0-9A-Z_]等同于上一条取非
为了能够准确的控制重复次数,正则表达式还提供
{a,b}(代表a<=匹配次数<=b)
如果你省略掉{1,2}中的2,那么就代表至少匹配一次,等价于?
如果你省略掉{1,2}中的1,那么就代表至多匹配2次。
元字符 | 说明 |
---|---|
. | 代表任意字符 |
| | 逻辑或操作符 |
[ ] | 匹配内部的任一字符或子表达式 |
[^] | 对字符集和取非 |
- | 定义一个区间 |
\ | 对下一字符取非(通常是普通变特殊,特殊变普通) |
* | 匹配前面的字符或者子表达式0次或多次 |
*? | 惰性匹配上一个 |
+ | 匹配前一个字符或子表达式一次或多次 |
+? | 惰性匹配上一个 |
? | 匹配前一个字符或子表达式0次或1次重复 |
{n} | 匹配前一个字符或子表达式 |
{m,n} | 匹配前一个字符或子表达式至少m次至多n次 |
{n,} | 匹配前一个字符或者子表达式至少n次 |
{n,}? | 前一个的惰性匹配 |
^ | 匹配字符串的开头 |
\A | 匹配字符串开头 |
$ | 匹配字符串结束 |
[\b] | 退格字符 |
\c | 匹配一个控制字符 |
\d | 匹配任意数字 |
\D | 匹配数字以外的字符 |
\t | 匹配制表符 |
\w | 匹配任意数字字母下划线 |
\W | 不匹配数字字母下划线 |
(?<=<h1>) .+ (?=<h1>)
第一个?<=表示在被匹配字符前必须得有<h1>
,后面的?=表示被匹配字符后必须有<h1>
回溯引用 \1 \2 \3 回溯到相应数字的表达式中,实现动态的正则表达式。