Java scanner.hasnext 正则表达式无法按预期工作



我正在尝试使用扫描程序来验证简单 CLI 工具上的输入。字符串只能包含字母、数字和正斜杠。我使用过的正则表达式^[a-zA-Z0-9/]+$当我在 http://www.freeformatter.com/java-regex-tester.html 上进行测试时可以工作

这是我的代码:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String path = "";
    String domain = "";

    System.out.print("domain (eg. example.com):");
    while (!sc.hasNext("(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)")) {
        System.out.println("invalid domain name.");
        sc.next();
    }
    domain = sc.next();

    System.out.print("path:");
    while (!sc.hasNext("^[a-zA-Z0-9/]+$")) {
        System.out.println("Invalid path. Try again:");
        sc.next();
    }
    path = sc.next();
}
}

这是我的程序的输出:

domain (eg. example.com):si.com
path:/one/two/three
Invalid path. Try again:
/
Invalid path. Try again:
/one/two
Invalid path. Try again:
aaa
Invalid path. Try again:

编辑:上面的代码不会对/one/two/one/等字符串产生匹配。

我做错了什么?我的正则表达式正确吗?为什么我链接到的测试器会产生不同的结果?

您使用的正则表达式开头有一个 NOT ^。正因为如此,正则表达式拒绝路径。请尝试以下代码。

Scanner scanner = new Scanner(System.in);
    System.out.print("path:");
    while (!scanner.hasNext("[a-zA-Z0-9/]+")) {
        System.out.println("Invalid path. Try again:");
        scanner.next();
    }
    String path = scanner.next();
    System.out.println("path:"+path);

它应该工作

最新更新