Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式:星重复运算符的所有格量词,即.\d**_Java_Regex_Quantifiers - Fatal编程技术网

Java 正则表达式:星重复运算符的所有格量词,即.\d**

Java 正则表达式:星重复运算符的所有格量词,即.\d**,java,regex,quantifiers,Java,Regex,Quantifiers,来自GLib参考手册“原子分组和所有格量词”小节: 当应用于字符串123456bar时,请考虑模式\d+foo:在匹配所有6位数字后,然后未能匹配“foo”,匹配器的正常操作是在最终失败之前,仅使用5位数字匹配\d+项,然后使用4位数字,依此类推 如果我们在前面的示例中使用(?>\d+)foo(称为原子分组),匹配器在第一次未能匹配“foo”时会立即放弃 当一个原子组的子模式只是一个重复的项时,如上面的示例所示,可以使用一种更简单的表示法,称为“所有格量词”:\d++foo 我的问题是:有没有任

来自GLib参考手册“原子分组和所有格量词”小节:

当应用于字符串
123456bar
时,请考虑模式
\d+foo
:在匹配所有6位数字后,然后未能匹配“foo”,匹配器的正常操作是在最终失败之前,仅使用5位数字匹配\d+项,然后使用4位数字,依此类推

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

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

我的问题是:有没有任何原因可以解释为什么星(
*
)重复操作符没有等价物

Java中的示例:

=“123456”中的最后一个字符串; //“加”(+) System.out.println(in.matches(\\d+);//真的 System.out.println(in.matches((?>\\d+));//真的 System.out.println(in.matches(\\d++);//真的 //“星”(*) System.out.println(in.matches(\\d*);//真的 System.out.println(in.matches((?>\\d*));//真的 System.out.println(in.matches(\\d**));//例外 异常堆栈跟踪为:

线程“main”java.util.regex.PatternSyntaxException中的异常:在索引3附近悬空元字符“*” \d** ^ 位于java.util.regex.Pattern.error(Pattern.java:1713) 位于java.util.regex.Pattern.sequence(Pattern.java:1878) 位于java.util.regex.Pattern.expr(Pattern.java:1752) 位于java.util.regex.Pattern.compile(Pattern.java:1460) Pattern.(Pattern.java:1133) 位于java.util.regex.Pattern.compile(Pattern.java:823) 位于java.util.regex.Pattern.matches(Pattern.java:928) 位于java.lang.String.matches(String.java:2090)
你可以将
+
添加到任何东西中,形成所有格量词(这不是“量词加倍”)。所以


你可以将
+
添加到任何东西中来生成所有格量词(这不是“双倍量词”)。所以


你是说
star
操作符而不是
start
<代码>\d*这里的
*
匹配
\d
,然后您有另一个
*
不匹配。如果您执行
*
,则它将匹配任意字符任意次数(如果我回忆正确,
将匹配除
\n
之外的所有字符,并且可能很少有其他内容)。您是指
星型
运算符而不是
开始
<代码>\d*这里的
*
匹配
\d
,然后您有另一个
*
不匹配。如果你这样做,
*
,那么它将匹配任意字符任意次数(如果我记得正确,
匹配除
\n
之外的所有字符,并且可能很少有其他内容)。哦,我不是这样看的。。。谢谢:)哦,我不是那样看的。。。谢谢:)
System.out.println(in.matches("\\d*+"));