正则表达式:星形重复算子的所有格量词,即\ d **

从GLib参考手册的“正则表达式语法”一节中的“原子分组和占有量词”部分:

考虑到应用于字符串123456bar的模式d+foo :在匹配所有6个数字后匹配“foo”失败后,匹配器的正常操作是再次尝试,只有5个数字匹配 d +项目,然后与4,等等,然后最终失败。

如果我们在前面的例子中使用(?>d+)foo (称为原子分组),则匹配器会在第一次无法匹配“foo”时立即放弃。

当一个原子组的子模式只是一个重复项时,如上例所示,可以使用一个简单的符号,称为“所有格量词”: d++foo

我的问题是:是否有任何理由为什么没有相同的明星( * )重复操作符?

Java中的示例:

final String in = "123456";
// "plus" (+)
System.out.println(in.matches("d+"));     // true
System.out.println(in.matches("(?>d+)")); // true
System.out.println(in.matches("d++"));    // true
// "star" (*)
System.out.println(in.matches("d*"));     // true
System.out.println(in.matches("(?>d*)")); // true
System.out.println(in.matches("d**"));    // exception

异常堆栈跟踪是:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 3
d**
   ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.sequence(Pattern.java:1878)
    at java.util.regex.Pattern.expr(Pattern.java:1752)
    at java.util.regex.Pattern.compile(Pattern.java:1460)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at java.util.regex.Pattern.matches(Pattern.java:928)
    at java.lang.String.matches(String.java:2090)

你可以给任何东西添加+来形成占有量词(这不是“量词翻倍”)。 所以

System.out.println(in.matches("d*+"));
链接地址: http://www.djcxy.com/p/76977.html

上一篇: Regex: possessive quantifier for the star repetition operator, i.e. \d**

下一篇: greedy quantifiers in languages that don't support them?