有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式检查运行无限时间

我已经编写了下面的正则表达式,因此,这个正则表达式将与输入不匹配;它正在工作,但循环运行无限时间。如何解决这个问题

String originalRegex ="(?s)\\00|\\+ADw-|\\+AD4-|%[0-9a-f]{2}|System[.][a-z]|javascript\\s*:|>(?:\".*|^'.*|[^a-z]'.*|'[^a-z].*|')[-+\\*/%=&|^~\"']|\\?.*<:|\\(\\s*[a-z]{2,}\\.[a-z]{2,}.*\\)";
String xmlData = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration xmlns=\"http://www.example.com/api/2.2\" timestamp=\"str111\" version=\"2.2\"><domain account=\"4af17966-c841-4b97-a94a-edd7a0769\" /></configuration>";
String freetext = ">(?:\".*|^'.*|[^a-z]'.*|'[^a-z].*|')[-+\\*/%=&|^~\"']|\\?.*<:";
final Pattern PATTERN_1 = Pattern.compile(freetext);
Matcher matcher = PATTERN_1.matcher(xmlData);

while (!matcher.find()) {
    System.out.println("Good Job");
}

共 (1) 个答案

  1. # 1 楼答案

    当且仅当输入序列的子序列与匹配器的模式匹配时,Java的.find()方法返回“true”-see the documentation。在代码中,如果未找到匹配项,则:

    while (!matcher.find()) {
        System.out.println("Good Job");
    }
    

    评估结果如下:

    while (!false) {
        System.out.println("Good Job");
    }
    

    或者更简单一点:

    while (true) {
        System.out.println("Good Job");
    }
    

    因此,你的无限循环