我尝试使用扫描程序在简单的CLI工具上验证输入。该字符串只能包含字母,数字和正斜杠。当我在http://www.freeformatter.com/java-regex-tester.html
上测试时,我使用的正则表达式^[a-zA-Z0-9/]+$
有效
这是我的代码:
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
或/
等字符串产生匹配。
我做错了什么? 我的正则表达式是正确的吗? 为什么我链接的测试人员产生不同的结果?
答案 0 :(得分:0)
您正在使用的正则表达式在开头有一个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);
应该有效