← 指南列表 GUIDE
理解 *、+、{n,m} 以及加上 ? 时的区别。

量词指定前一个元素重复多少次。*是 0 次以上,+是 1 次以上,?是 0 次或 1 次。确切次数用 {n},范围用 {n,m} 表示。例如 \d{3} 就是恰好三个数字。

默认情况下量词是贪婪的(greedy)。也就是说会尽可能多地吃入。把 <.*> 应用到 <a>b<c> 上,会从第一个 < 到最后一个 > 整段被抓取。

在量词后面加上 ? 就会变成懒惰的(lazy)匹配。<.*?> 会尽可能少地吃入,只抓取 <a>。逐个提取标签或引号之间的内容时,这个区别至关重要。

由于贪婪/懒惰,模式常常会与预期不同地运行。如果结果抓取得太宽,就想想懒惰量词或否定字符类([^>] 等)。