我正在尝试使用扫描程序来验证简单CLI工具上的输入。该字符串只能包含字母,数字和正斜杠。我已经使用^[a-zA-Z0-9/]+$
作品,当我测试它http://www.freeformatter.com/java-regex-tester.htmljava scanner.hasnext正则表达式不按预期方式工作
这里的正则表达式是我的代码:
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
或/
。
我在做什么错? 我的正则表达式是否正确? 为什么我连接的测试仪产生不同的结果?
是的,它具有:https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#hasNext-java.util.regex .Pattern- – Koekje
好点@CollinD,我应该知道更好:) – simon
@Koekje我不遵循你所说的话......你能详细说明一下吗? – simon