シンプルなCLIツールでスキャナの入力を検証しようとしています。文字列には、文字、数字、およびスラッシュのみを含めることができます。私はここでhttp://www.freeformatter.com/java-regex-tester.htmljava scanner.hasnext正規表現が正常に動作しない
上でそれをテストするとき、私は^[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
、/
などの文字列の一致が生成されません。
私は間違っていますか? 正規表現は正しいですか? リンク先のテスターが異なる結果をもたらすのはなぜですか?
はい、それは持っているが動作するはずです.Pattern- – Koekje
良い点@CollinD、私はよく知っているはずです:) – simon
@Koekje私はあなたが言っていることに従わない...あなたは精巧にできますか? – simon