gpt4 book ai didi

java - 为什么正则表达式最后少匹配一个字符?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:30 25 4
gpt4 key购买 nike

问题是最后一个字符永远不会匹配。当我尝试使用组显示时,它显示除最后一个字符之外的所有匹配项。在所有情况下都是一样的。下面是代码及其o/p。

package mon;
import java.util.*;
import java.util.regex.*;

class HackerRank {

static void Pattern(String text) {
String p="\\d{1,2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5]";
String pattern="(("+p+")\\.){3}"+p;

Pattern pi=Pattern.compile(pattern);
Matcher m=pi.matcher(text);
// System.out.println(m.group());
if(m.find() && m.group().equals(text))
System.out.println(m.group()+"true");
else
System.out.println(m.group()+" false");
}
public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
Pattern(sc.next());
}
sc.close();


}

}

IP:000.12.12.034;O/P:000.12.12.03假

最佳答案

您应该在八位字节模式内正确分组替代方案:

String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
// ^^^ ^

然后构建类似的模式

String pattern = p + "(?:\\." + p + "){3}";

它会变得更有效率。然后,使用 matches 来要求完整的字符串匹配:

if(m.matches()) {...

查看Java demo :

String p="(?:\\d{1,2}|[01]\\d{2}|2[0-4]\\d|25[0-5])";
String pattern = p + "(?:\\." + p + "){3}";
String text = "192.156.34.56";
// System.out.println(pattern); => (?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|[01]\d{2}|2[0-4]\d|25[0-5])){3}
Pattern pi=Pattern.compile(pattern);
Matcher m=pi.matcher(text);
if(m.matches())
System.out.println(m.group()+" => true");
else
System.out.println("False"); => 192.156.34.56 => true

here is the resulting regex demo .

关于java - 为什么正则表达式最后少匹配一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51101729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com