量词

控制某个内容重复多少次——从“也许一次”到“正好三次”——使用 ?、*、+、{n,m} 及其贪婪或懒惰形式。

阅读规则:指南中的“量词” →反复操练:量词矿场 →

本课程建立在字符类之上

你将学到

零个或多个 一个或多个 可选 {n} 次重复 贪婪与懒惰

步骤 · 13

  1. 01多少次?讲解
  2. 02零个或多个狩猎
  3. 03一个或多个狩猎
  4. 04可选狩猎
  5. 05恰好 n 次狩猎
  6. 06n 次或更多狩猎
  7. 07一个范围狩猎
  8. 08重复一个字符类狩猎
  9. 09组合各部分狩猎
  10. 10默认贪婪狩猎
  11. 11改成懒惰狩猎
  12. 12高尔夫:整数狩猎
  13. 13量词已掌握讲解

正则量词:?、*、+ 与 {n,m}

量词告诉正则,它前面的那一项可以重复多少次。没有量词时,每个字母、点号或字符类都只匹配一次。有了量词,单独一项就能延伸成一串字符,或者变成可选的。

需要掌握的形式有四种。? 表示零次或一次,用来标记可选的部分。* 表示零次或多次,+ 表示一次或多次。花括号给出确切的次数:{3} 是恰好三次,{2,} 是两次或更多,{1,3} 是一到三次。量词可以作用于单个字母、[a-z] 这样的字符类,或者括号里的分组。

量词默认是贪婪的:尽可能多地吃进字符,只有当正则的其余部分需要时才吐出一些。在量词后面加一个 ?,比如 +? 或 *?,它就变成懒惰的,尽可能少地匹配。在狩猎中,量词让一个简短的正则就能抓住长度各异的单词,同时放过超出次数范围的那些。

示例

  1. /go+al/

    抓住

    • goal
    • gooooal

    放过

    • gal
    • gaol

    + 要求至少一个 o,但多少个都行。

  2. /https?:/

    抓住

    • http:
    • https:

    放过

    • htt:
    • ftp:

    ? 让 s 变成可选的,两种前缀都能匹配。

  3. /lo{2,3}p/

    抓住

    • loop
    • looop

    放过

    • lop
    • loooop

    花括号设定范围:l 和 p 之间有两个或三个 o,不多也不少。

  4. /\d*\.\d+/

    抓住

    • .5
    • 3.14
    • 10.0

    放过

    • 3.
    • 314

    * 允许整数部分缺失,而 + 坚持小数点后至少有一位数字。

常见错误

  • 以为量词会重复整个单词。 ha+ 只重复 a(haaa);要重复出 haha,请把这部分包进分组:(ha)+。
  • 放任贪婪的 `. * 跑得太远。在 "a" and "b" 上,正则 ".*" 会从第一个引号一直匹配到最后一个;用 ".*?" 或 "[^"]*"` 就能停在最近的那个引号。
  • 忘了 * 可以什么都不匹配。 x* 能匹配任何字符串,哪怕里面一个 x 都没有;如果至少需要一个,就用 +。

阅读规则:指南中的“量词” →反复操练:量词矿场 →

延伸阅读:贪婪与懒惰量词:为什么 .* 会吃掉太多 →