正则表达式:星形重复算子的所有格量词,即\ 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?