请在正则表达式Java程序中验证输出
我在正则表达式中遇到了一个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
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