我正在嘗試使用掃描程序來驗證簡單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