Java 中的量词

2025年1月7日 | 阅读 4 分钟

Java中的量词是关键概念,尤其是在正则表达式的上下文中。它们指定输入中必须存在的字符、组或字符类的实例数量,才能找到匹配项。在本节中,我们将讨论Java中可用的不同类型的量词、它们的用法以及说明其应用的示例。

量词

在Java中,量词用于正则表达式,以控制特定模式应该出现的次数。它可以指定确切的数字、范围,或者仅仅表示模式应该出现一次或多次。以下是Java中可用量词的快速概述

贪婪量词: 它们尝试匹配尽可能多的出现次数。

勉强量词: 它们尝试匹配尽可能少的出现次数。

贪婪量词: 它们也尝试匹配尽可能多的出现次数,但不会回溯。

量词类型

贪婪量词

* (零次或多次): 匹配前面的元素零次或多次。

+ (一次或多次): 匹配前面的元素一次或多次。

? (零次或一次): 匹配前面的元素零次或一次。

{n} (正好 n 次): 匹配前面的元素正好 n 次。

{n,} (至少 n 次): 匹配前面的元素至少 n 次。

{n,m} (n 到 m 次): 匹配前面的元素 n 到 m 次。

勉强量词

*? (零次或多次): 匹配前面的元素零次或多次,但次数越少越好。

+? (一次或多次): 匹配前面的元素一次或多次,但次数越少越好。

?? (零次或一次): 匹配前面的元素零次或一次,但次数越少越好。

{n}? (正好 n 次): 匹配前面的元素正好 n 次(勉强,但这可以省略,因为它只能匹配 n 次)。

{n,}? (至少 n 次): 匹配前面的元素至少 n 次,但次数越少越好。

{n,m}? (n 到 m 次): 匹配前面的元素 n 到 m 次,但次数越少越好。

贪婪量词

*+ (零次或多次): 匹配前面的元素零次或多次,但不放弃任何匹配。

++ (一次或多次): 匹配前面的元素一次或多次,但不放弃任何匹配。

?+ (零次或一次): 匹配前面的元素零次或一次,但不放弃任何匹配。

{n}+ (正好 n 次): 匹配前面的元素正好 n 次(贪婪,但这可以省略,因为它只能匹配 n 次)。

{n,}+ (至少 n 次): 匹配前面的元素至少 n 次,但不放弃任何匹配。

{n,m}+ (n 到 m 次): 匹配前面的元素 n 到 m 次,但不放弃任何匹配。

量词示例

让我们看一些例子来理解这些量词是如何工作的。

贪婪量词

文件名:GreedyQuantifiersExample.java

输出

 
Matched: abbcccddddeeeee   

解释: .* 量词试图匹配 'a' 和 'e' 之间的尽可能多的字符,从而得到最长的匹配。

勉强量词

文件名:ReluctantQuantifiersExample.java

输出

 
Matched: abbc   

解释: .*? 量词试图匹配 'a' 和 'e' 之间的尽可能少的字符,从而得到最短的匹配。

贪婪量词

文件名:PossessiveQuantifiersExample.java

输出

 
No match found   

解释: .*+ 量词尝试匹配尽可能多的字符,并且不回溯。由于它消耗了所有字符,因此在 'a' 之后找不到 'e'。

结论

理解Java中的量词对于有效地使用正则表达式至关重要。它们提供了根据当前任务的要求以不同方式匹配模式的灵活性。

贪婪量词匹配尽可能多的出现次数,勉强量词匹配尽可能少的出现次数,贪婪量词匹配尽可能多的出现次数而不回溯。通过掌握这些量词,我们可以利用Java中正则表达式的全部功能。