스캐너를 사용하여 간단한 CLI 도구에서 입력의 유효성을 검사하려고합니다. 문자열에는 문자, 숫자 및 슬래시 만 포함 할 수 있습니다.java scanner.hasnext 정규식이 예상대로 작동하지 않습니다.
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:
편집 : 위의 코드 내 프로그램의 출력이
여기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();
}
}
입니다 : 내가 여기
http://www.freeformatter.com/java-regex-tester.html에서 테스트 할 때 나는 ^[a-zA-Z0-9/]+$
작품을 사용한 정규식 내 코드입니다 /one/two
, /one
또는 /
과 같이 문자열에 일치하는 항목이 생성되지 않습니다.
내가 뭘 잘못하고 있니? 내 정규식이 맞습니까? 왜 내가 연결 한 테스터가 다른 결과를 산출합니까?
예는이 작동합니다 .Pattern- – Koekje
좋은 지적 @CollinD, 나 더 잘 알아야한다 :) – simon
@ Koekje 나는 당신이 말하는 것을 따라하지 않는다 ... 당신은 정교 할 수 있는가? – simon