本课程建立在字符类之上
你将学到
零个或多个 一个或多个 可选 {n} 次重复 贪婪与懒惰
步骤 · 13
- 01多少次?讲解
- 02零个或多个狩猎
- 03一个或多个狩猎
- 04可选狩猎
- 05恰好 n 次狩猎
- 06n 次或更多狩猎
- 07一个范围狩猎
- 08重复一个字符类狩猎
- 09组合各部分狩猎
- 10默认贪婪狩猎
- 11改成懒惰狩猎
- 12高尔夫:整数狩猎
- 13量词已掌握讲解
正则量词:?、*、+ 与 {n,m}
量词告诉正则,它前面的那一项可以重复多少次。没有量词时,每个字母、点号或字符类都只匹配一次。有了量词,单独一项就能延伸成一串字符,或者变成可选的。
需要掌握的形式有四种。? 表示零次或一次,用来标记可选的部分。* 表示零次或多次,+ 表示一次或多次。花括号给出确切的次数:{3} 是恰好三次,{2,} 是两次或更多,{1,3} 是一到三次。量词可以作用于单个字母、[a-z] 这样的字符类,或者括号里的分组。
量词默认是贪婪的:尽可能多地吃进字符,只有当正则的其余部分需要时才吐出一些。在量词后面加一个 ?,比如 +? 或 *?,它就变成懒惰的,尽可能少地匹配。在狩猎中,量词让一个简短的正则就能抓住长度各异的单词,同时放过超出次数范围的那些。
示例
抓住
- goal
- gooooal
放过
- gal
- gaol
+要求至少一个 o,但多少个都行。抓住
- http:
- https:
放过
- htt:
- ftp:
?让 s 变成可选的,两种前缀都能匹配。抓住
- loop
- looop
放过
- lop
- loooop
花括号设定范围:l 和 p 之间有两个或三个 o,不多也不少。
抓住
- .5
- 3.14
- 10.0
放过
- 3.
- 314
*允许整数部分缺失,而+坚持小数点后至少有一位数字。
常见错误
- 以为量词会重复整个单词。
ha+只重复 a(haaa);要重复出haha,请把这部分包进分组:(ha)+。 - 放任贪婪的 `. *
跑得太远。在"a" and "b"上,正则".*"会从第一个引号一直匹配到最后一个;用".*?"或"[^"]*"` 就能停在最近的那个引号。 - 忘了
*可以什么都不匹配。x*能匹配任何字符串,哪怕里面一个 x 都没有;如果至少需要一个,就用+。
阅读规则:指南中的“量词” →反复操练:量词矿场 →