企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### [量词](https://lingcoder.gitee.io/onjava8/#/book/18-Strings?id=%e9%87%8f%e8%af%8d) 量词描述了一个模式捕获输入文本的方式: * **贪婪型**: 量词总是贪婪的,除非有其他的选项被设置。贪婪表达式会为所有可能的模式发现尽可能多的匹配。导致此问题的一个典型理由就是假定我们的模式仅能匹配第一个可能的字符组,如果它是贪婪的,那么它就会继续往下匹配。 * **勉强型**: 用问号来指定,这个量词匹配满足模式所需的最少字符数。因此也被称作懒惰的、最少匹配的、非贪婪的或不贪婪的。 * **占有型**: 目前,这种类型的量词只有在 Java 语言中才可用(在其他语言中不可用),并且也更高级,因此我们大概不会立刻用到它。当正则表达式被应用于`String`时,它会产生相当多的状态,以便在匹配失败时可以回溯。而“占有的”量词并不保存这些中间状态,因此它们可以防止回溯。它们常常用于防止正则表达式失控,因此可以使正则表达式执行起来更高效。 | 贪婪型 | 勉强型 | 占有型 | 如何匹配 | | --- | --- | --- | --- | | `X?` | `X??` | `X?+` | 一个或零个`X` | | `X*` | `X*?` | `X*+` | 零个或多个`X` | | `X+` | `X+?` | `X++` | 一个或多个`X` | | `X{n}` | `X{n}?` | `X{n}+` | 恰好`n`次`X` | | `X{n,}` | `X{n,}?` | `X{n,}+` | 至少`n`次`X` | | `X{n,m}` | `X{n,m}?` | `X{n,m}+` | `X`至少`n`次,但不超过`m`次 | 应该非常清楚地意识到,表达式`X`通常必须要用圆括号括起来,以便它能够按照我们期望的效果去执行。例如: ~~~ abc+ ~~~ 看起来它似乎应该匹配1个或多个`abc`序列,如果我们把它应用于输入字符串`abcabcabc`,则实际上会获得3个匹配。然而,这个表达式实际上表示的是:匹配`ab`,后面跟随1个或多个`c`。要表明匹配1个或多个完整的字符串`abc`,我们必须这样表示: ~~~ (abc)+ ~~~ 你会发现,在使用正则表达式时很容易混淆,因为它是一种在 Java 之上的新语言。