Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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程序中验证输出_Java_Regex_Certificate - Fatal编程技术网

请在正则表达式Java程序中验证输出

请在正则表达式Java程序中验证输出,java,regex,certificate,Java,Regex,Certificate,我在正则表达式中遇到了一个Java程序 以下是程序代码: import java.util.regex.*; public class Regex_demo01 { public static void main(String[] args) { boolean b=true; Pattern p=Pattern.compile("\\d*"); Matcher m=p.matcher("ab34ef"); while

我在正则表达式中遇到了一个Java程序

以下是程序代码:

import java.util.regex.*;

public class Regex_demo01 {

    public static void main(String[] args) {
        boolean b=true;
        Pattern p=Pattern.compile("\\d*");
        Matcher m=p.matcher("ab34ef");

        while(b=m.find())
        {
            System.out.println(b);
            System.out.println(">"+m.start()+"\t"+m.group()+"<");
        }


    }

}
import java.util.regex.*;
公共类Regex_demo01{
公共静态void main(字符串[]args){
布尔b=真;
模式p=模式。编译(\\d*);
匹配器m=p.Matcher(“ab34ef”);
while(b=m.find())
{
系统输出打印ln(b);

System.out.println(“>”+m.start()+“\t”+m.group()+”6Anser很简单。
x*
匹配任何
x
偶数
0


*
替换为与剩下的一个或多个元素匹配的
+

答案很简单。
x*
匹配任何
x
偶数
0

*
替换为与剩下的一个或多个元素匹配的
+

星形量词(
*
)定义为“零次或多次”。也就是说,您的模式大部分时间与零位匹配

您实际需要的可能是加号量词(
+
),它表示“一次或多次”

资料来源:


为什么索引6中有匹配项

正则表达式不在字符基础上工作,而是在单个字符之间工作。匹配空字符串时,它将查找每个字符的前后。当然,重复的结果会被忽略,因此第一个字符之后和第二个字符之前的空字符串将产生一个匹配,而不是两个匹配。默认情况下,算法是贪婪的,这意味着将匹配尽可能多的字符

考虑这个例子:

输入字符串为
1

正则表达式是
\\d*

在这种情况下,正则表达式引擎在第一个字符之前启动,并尝试匹配零、一个或多个数字。由于它是贪婪的,所以它不会在找到开头的空字符串后停止。它会找到一个后面没有数字的“1”。这是第一个匹配。然后在匹配后继续搜索。它会找到一个空字符串g也匹配它,因为它等于零位

对于正则表达式,字符串“1”看起来很像:

"" + "1" + ""
前两个单元(空字符串和“1”)与模式匹配,第三个空字符串也匹配

关于这方面的深入文章:

星量词(
*
)被定义为“零次或多次”。也就是说,您的模式大部分时间都匹配零位数字

您实际需要的可能是加号量词(
+
),它表示“一次或多次”

资料来源:


为什么索引6中有匹配项

正则表达式不在字符基础上工作,而是在单个字符之间工作。匹配空字符串时,它将查找每个字符的前后。当然,重复的结果会被忽略,因此第一个字符之后和第二个字符之前的空字符串将产生一个匹配,而不是两个匹配。默认情况下,算法是贪婪的,这意味着将匹配尽可能多的字符

考虑这个例子:

输入字符串为
1

正则表达式是
\\d*

在这种情况下,正则表达式引擎在第一个字符之前启动,并尝试匹配零、一个或多个数字。由于它是贪婪的,所以它不会在找到开头的空字符串后停止。它会找到一个后面没有数字的“1”。这是第一个匹配。然后在匹配后继续搜索。它会找到一个空字符串g也匹配它,因为它等于零位

对于正则表达式,字符串“1”看起来很像:

"" + "1" + ""
前两个单元(空字符串和“1”)与模式匹配,第三个空字符串也匹配

关于此的深入文章:

我的问题是为什么
>6


我的问题是为什么
>6您要查找任何类型的数字,让它成为
0-n
,因此任何长度的
char
都适合最后一个索引+1的regext。它返回该值是因为您使用了
\\d*
也允许空匹配。您应该使用
\\d+
来查找任何类型的数字数字,让它成为
0-n
,这样任何长度的
char
都适合最后一个索引+1的regext。它返回这个值是因为您使用了
\\d*
,它也允许空匹配。您应该在while循环的最后一次迭代中使用
\\d+
,为什么是m.find()即使我们已经检查了字符串的最后一个索引,即5,也返回true?我的意思是,它在字符串中最后一个字符之外的外观如何,它应该提供false并终止。
0
在第一个字符之前。
6
在最后一个之后。在while循环的最后一次迭代中,m.find()即使我们已经检查了字符串的最后一个索引,即5,也返回true?我的意思是,它在字符串中最后一个字符之外的外观如何,它应该提供false并终止。
0
在第一个字符之前。
6
在最后一个之后。在while循环的最后一次迭代中,m.find()即使我们已经检查了字符串的最后一个索引,即5,也返回true?我的意思是,除了字符串中的最后一个字符外,它应该提供false和terminate。好的,休伯特!我知道它在这里匹配零个或多个字符,因此”>这是一个完美的解释!感谢Hubert提供了这些宝贵的知识。在while循环的最后一次迭代中,m.find()是如何实现的返回true,即使我们已经检查了字符串的最后一个索引,即5?我的意思是,除了字符串中的最后一个字符外,它应该提供false和terminate。好的,休伯特!我知道它在这里匹配零个或多个字符,因此“>6这是一个完美的解释!感谢Hubert提供的宝贵知识。好的,anubhava!我知道它在这里匹配零个或多个字符,因此”>6不,它不会超出
la