我正在尝试使用扫描程序来验证简单 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);
它应该工作